如何递归反转链接列表?

问题描述 投票:0回答:1

输入 5 -> 9 -> 8 -> 3 -> 1 -> 7。

预期输出。7 -> 1 -> 3 -> 8 -> 9 -> 5

问题。

当我显示反向链接列表时,结果是5。这是一个问题,因为这应该是尾部而不是头部。其余的节点在显示中没有出现。

问题:是否有代码库的问题?

是否有一个代码库的问题阻止了从头到尾的遍历,并改变了反向列表的指针?

代码。

LinkedList:

class LinkedList {
  constructor() {
    this.head = null;
    this.size = 0;
  }

  insertFirst(item) {
    if (this.head !== null) {
      const newHead = new _Node(item);
      let oldHead = this.head;

      oldHead.prev = newHead;
      newHead.next = oldHead;
      this.head = newHead;
    } else {
      this.head = new _Node(item, this.head);
    }

    this.size++;
  }

  insertLast(item) {
    if (!this.head) {
      this.insertFirst(item);
    } else {
      let tempNode = this.head;
      while (tempNode.next !== null) {
        tempNode = tempNode.next;
      }
      tempNode.next = new _Node(item, null, tempNode);
    }
    this.size++
  }
}

module.exports = LinkedList;

Main:

const LinkedList = require("./LinkedLists");
const { reverse } = require("./Reverse");
const { display } = require("./Supplemental");

function main() {
  let SLL = new LinkedList();

  SLL.insertFirst(5);
  SLL.insertLast(9);
  SLL.insertLast(8);
  SLL.insertLast(3);
  SLL.insertLast(1);
  SLL.insertLast(7);

  reverse(SLL);
  display(SLL);

  return SLL;
}

console.log(main());

反向。

reverse = (SLL) => {
  let curr = SLL.head

  if (!curr) {
    return;
  }

  if (!curr.next) {
    SLL.head = curr;
    return;
  }

  let tmp = reverse(curr.next);
  curr.next.next = curr;
  curr.next = null;
  return tmp;
}


module.exports = { reverse };

显示。

display = (SLL) => {
  let currentNode = SLL.head;

  if (!SLL.head) {
    return null;
  }

  while (currentNode !== null) {
    console.log(currentNode.value);
    currentNode = currentNode.next;
  }

  return;
};
javascript data-structures linked-list reverse singly-linked-list
1个回答
0
投票

谁能告诉我是什么?return tmp 在Reverse.js文件中做了什么?

(1)删除了Main.js中的display。

(2)编辑了Main.js。

const LinkedList = require("./LinkedLists");
const { reverse } = require("./Reverse");
const { display } = require("./Supplemental");

function main() {
  let SLL = new LinkedList();

  SLL.insertFirst(5);
  SLL.insertLast(9);
  SLL.insertLast(8);
  SLL.insertLast(3);
  SLL.insertLast(1);
  SLL.insertLast(7);

  const result = reverse(SLL.head);
  console.log(result);

  return SLL;
}

return main();

(3) 编辑Reverse.js。

reverse = (curr, prev = null) => {
  if (!curr) { 
    return prev;
  }

  let tmp = reverse(curr.next, curr);

  const temp = curr.next;
  curr.next = prev;
  curr.prev = temp;

  return tmp;
}

module.exports = { reverse };
© www.soinside.com 2019 - 2024. All rights reserved.