如何合并排序双向链表?

时间:2018-11-27 08:41:35

标签: c# mergesort doubly-linked-list

我还没有找到C#的实现,而且我发现其他语言的实现也不令人满意……需要提前知道节点数量,没有针对双链和单链进行过优化列表或其他效率低下,过于复杂的...我将发布自己的答案。

1 个答案:

答案 0 :(得分:0)

这是我的解决方案。在我自己的代码中,此类中还有更多方法,以及一个伴随的标头类,但是我去除了除归并排序以外的所有内容。此实现假定列表的头和尾指向指向它们的头节点,并且空列表由头节点表示,而Next和Prev指向自身。 (这是一项经典技术,可以通过在头和尾使用空指针来简化操作。)

import { Component, OnInit } from '@angular/core';



@Component({
  selector: 'app-foo',
  templateUrl: './foo.component.html',
  styleUrls: ['./foo.component.css']
})
export class Foo implements OnInit {

  constructor() { }

  ngOnInit() {
  }
  display="none";


     arrayBuffer:any;
  file:File;
  progress="0";

     updateProgress(i,data){
    this.progress = (100*i/data.length).toString();
    return 1
  }

incomingfile(event) 
    {

      document.getElementById("uploadButton").setAttribute("disabled","true");
    this.file= event.target.files[0]; 
    let fileReader = new FileReader();
      fileReader.onload = (e) => {
        this.arrayBuffer = fileReader.result;
        var data = new Uint8Array(this.arrayBuffer);

        var arr = new Array();
        for (var i = 0; i != data.length; ++i){
          this.updateProgress(i,data);
         arr[i] = String.fromCharCode(data[i]);

        }



      }

      fileReader.readAsArrayBuffer(this.file);
      this.display="block";
      document.getElementById("uploadButton").removeAttribute("disabled");

    }