[寶寶也能看懂的活動篇][30-Day LeetCoding Challenge] 第八天

Hi 你們好,我是張小豬。歡迎來到『寶寶也能看懂』系列特別篇 - 30-Day LeetCoding Challenge。這是一個 leetcode 官方的小活動。能夠在官網看到,從 4 月 1 號開始,天天官方會選出一道題,在 24 小時內完成便可得到一點小獎勵。git

這裏是 4 月 8 號的題,也是題目列表中的第 876 題 -- 『鏈表的中間結點』github

題目描述

給定一個帶有頭結點 head 的非空單鏈表,返回鏈表的中間結點。shell

若是有兩個中間結點,則返回第二個中間結點。segmentfault

示例 1:spa

輸入:[1,2,3,4,5]
輸出:此列表中的結點 3 (序列化形式:[3,4,5])
返回的結點值爲 3 。 (測評系統對該結點序列化表述是 [3,4,5])。
注意,咱們返回了一個 ListNode 類型的對象 ans,這樣:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.

示例 2:指針

輸入:[1,2,3,4,5,6]
輸出:此列表中的結點 4 (序列化形式:[4,5,6])
因爲該列表有兩個中間結點,值分別爲 3 和 4,咱們返回第二個結點。

提示:code

  • 給定鏈表的結點數介於 1 和 100 之間。

官方難度

EASY對象

解決思路

這是一個比較典型的問題,而且咱們在以前30天挑戰次日的題解的方案 2 中就提到過一種思路 -- 快慢指針。因此小豬這裏就不作過多的分析了,直接給方案啦。blog

直接方案

經過兩個指針來標識位置,其中快指針每次移動兩步,而慢指針每次移動一步。這樣當快指針到達鏈表末端的時候,慢指針正好移動到一半。leetcode

這裏須要注意的點是,題目要求若是是偶數個節點,返回中間靠後的那一個。針對這一點,咱們能夠經過讓快指針可以跳出末端成爲 null,來確保對於總共是偶數個節點的最後那一次慢指針移動。

具體代碼以下:

const middleNode = (head) => {
  let slow = fast = head;
  while (fast !== null && fast.next !== null) {
    fast = fast.next.next;
    slow = slow.next;
  }
  return slow;
};

總結

喵喵喵,套路!都是套路!

但願能幫到有須要的小夥伴。若是以爲不錯的話,記得『三連』哦。

今天是小豬的生日,因此更加愛大家啦~ 麼麼噠~

相關連接

qrcode_green.jpeg

相關文章
相關標籤/搜索