在 JavaScript 中找到链表的中间节点


问题

我们需要编写一个 JavaScript 函数,该函数将链表的头作为第一个且唯一的参数。

我们的函数应该返回存储在列表中间节点中的值。如果存在两个中间节点,则我们应该返回其中的第二个节点。

例如,如果列表如下所示

输入

[4, 6, 8, 9, 1]

输出

const output = 8;

以下为代码

示例

class Node {
   constructor(data) {
      this.data = data;
      this.next = null;
   };
};
class LinkedList {
   constructor() {
      this.head = null;
      this.size = 0;
   };
};
LinkedList.prototype.add = function(data) {
   const newNode = new Node(data);
   let curr;
      if(this.head === null) {
         this.head = newNode;
      } else {
         curr = this.head;
         while(curr.next) {
            curr = curr.next;
      }
      curr.next = newNode;
   };
      this.size++;
};
const list = new LinkedList();
list.add(4);
list.add(6);
list.add(8);
list.add(9);
list.add(1);
const findMiddle = (head) => {
   let slow = head
   let fast = head
   while(fast && fast.next) {
      slow = slow.next
      fast = fast.next.next
   }
   return slow.data
};
console.log(findMiddle(list.head));

输出

8

更新于: 2021 年 4 月 23 日

88 次浏览

开启你的职业生涯

完成课程可获得认证

立即开始
广告