簡體   English   中英

反轉鏈表……我的實現有什么問題?

[英]Reverse a linked list… what is wrong with my implementation?

根據下面的實現,我無法反轉鏈接列表。 我在這里做錯了什么或遺漏了什么嗎?

class Node {
    constructor(val) {
        this.val = val;
        this.next = null;
    }
}

class SinglyLinkedList {
    constructor() {
        this.head = null;
        this.length = 0;
    }

    push(val) {
        var newNode = new Node(val);

        var current = this.head; 

        if (!this.head) 
            this.head = newNode; 
        else {

            // iterate to the end of the 
            // list 
            while (current.next) { 
                current = current.next; 
            } 

            // add node 
            current.next = newNode; 
        } 
        this.length++;

        return this; 
    }

    // reverse the list
    reverse() {
        var prev = null;
        var curr = this.head;
        while (curr !== null) {
            var temp = curr.next;
            curr.next = prev;
            prev = curr;
            curr = temp;
        }

        return this;
    }

    print() {
        var arr = []
        var current = this.head;

        while(current) {
            arr.push(current.val);
            current = current.next; 
        }

        console.log(arr);
    }
}

這是我創建 object 並推送一些節點時的實現

var list = new SinglyLinkedList();
list.push(1);
list.push(2);
list.push(3);
list.push(4);

每次我運行list.reverse()然后list.print()它只打印[1]而不是[4,3,2,1]

您正確地反轉了節點之間的鏈接,但您永遠不會更改this.head指向的內容,因此它現在指向列表的末尾而不是列表的前面。 因此,當您調用 print 時,打印將從最后一個節點開始,然后無處可至 go。

  reverse() {
      var prev = null;
      var curr = this.head;
      while (curr !== null) {
          var temp = curr.next;
          curr.next = prev;
          prev = curr;
          curr = temp;
      }
      this.head = prev; // <--- added
      return this;
  }

您尚未在reverse方法中更新head屬性。 只需添加this.head = prev; while循環之后,我相信它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM