首页 > 解决方案 > 在 JavaScript 中反转链接列表会覆盖 this.head 并且不会更新

问题描述

不确定函数 reverseLinkedList 中出了什么问题。

我正在尝试反转链接列表,而我所采取的步骤似乎适用于 leetcode/hackerrank 等在线评委。当然,在创建链接列表时默认结构是不同的。

class Node{
  ...
}


class LinkedList{
  constructor(){
    this.head = null;
    this.size = 0;
  };
    
  insert(data){
    this.head = new Node(data, this.head);
    this.size++;
  };

  printElements(){
    let current = this.head;
    while(current){
      console.log(current.data)
      current = current.next;
    }
  };

  reverseLinkedList(){
    let prev = null;
    let current = this.head;
    let temp;
    while(current){
        temp = current.next;
        current.next = prev;
        prev = current;
        current = temp;
    }
  }
}

const ll = new LinkedList();

ll.insert(1);
ll.insert(12);
ll.insert(6);

ll.reverseLinkedList();

ll.printElements();

尝试通过 leetcode/hackerrank 解决同样的问题,效果很好。我不确定为什么会发生这种情况。

标签: javascriptdata-structures

解决方案


您缺少将新节点设置.head为前最后一个节点:

reverseLinkedList() {
  let prev = null;
  let current = this.head;
  while (current) {
    const temp = current.next;
    current.next = prev;
    prev = current;
    current = temp;
  }
  this.head = prev;
//^^^^^^^^^^^^^^^^^
}

推荐阅读