DOJO004

  • Dashool 創辦人
  • 喜歡調酒
  • Rails、Nextjs、TypeScript

來刷 LeetCode 吧! 05 876. Middle of the Linked List

LeetCode

題目分析 

給一個單向鏈表( single linked list )的頭節點,返回該鏈表的中間節點。 
若有兩個中間節點,則返回第二個中間節點。 
關於鏈表( Linked List) 的介紹,放在這邊。 

第一直覺(錯誤) 

看題目給的範例圖,我以為可以使用 head.length、head.slice
 
var middleNode = function (head) {
  if (head.length % 2 === 0) {
    return head.slice(head.length / 2);
  } else {
    return head.slice(head.length / 2 + 1);
  }
};

直接噴錯

 
 

快慢指針

 
爬了文才知道的用法。
 
原理為:
 
  • 初始化兩個指針 slow 和 fast,都指向鏈表的頭節點。
  • 快指針 fast 每次移動兩步,慢指針 slow 每次移動一步。
  • 當快指針到達鏈表末尾時,慢指針正好在鏈表的中間節點。如果鏈表長度是偶數,慢指針會在第二個中間節點上。

var middleNode = function (head) {
  let slow = head;
  let fast = head;

  while (fast !== null && fast.next !== null) {
    slow = slow.next;
    fast = fast.next.next;
  }

  return slow;
};

版權所有 © 2023 DOJO004

Deployed on Zeabur