鍊錶的中間結點

2021-10-01 04:30:54 字數 1057 閱讀 9788

力扣題目鏈結

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

如果有兩個中間結點,則返回第二個中間結點。

例項1:

輸入:[1,2,3,4,5]

輸出:此列表中的結點 3 (序列化形式:[3,4,5])

返回的結點值為 3 。

例項2

輸入:[1,2,3,4,5,6]

輸出:此列表中的結點 4 (序列化形式:[4,5,6])

由於該列表有兩個中間結點,值分別為 3 和 4,我們返回第二個結點。

解法一:

要想求出鍊錶的中間節點,我們可以遍歷整個鍊錶,把鍊錶的所有元素儲存到向量中,然後直接返回向量的中間元素即可。

**如下:

/**

* definition for singly-linked list.

* struct listnode

* * }; */

* class solution

* return q[q.size()/2];

* }

* };

顯然,這種演算法雖然簡單、容易理解,但是時間複雜度和空間複雜度較高。所以我們要想乙個時間複雜度和空間複雜度較小的演算法。

執行用時 :4 ms, 在所有 cpp 提交中擊敗了67.36% 的使用者

記憶體消耗 :8.4 mb, 在所有 cpp 提交中擊敗了60.53%的使用者

解法二:

我們可以用快慢指標來完成這道題。一開始,快慢指標都指向頭結點,快指標每次走兩步,慢指標每次走一步。這時,當快指標走到末尾時,慢指標剛好指向鍊錶中間元素,然後返回該指標即可。相關**如下(力扣可通過)

class solution         

return slow;

}};

執行用時 :4 ms, 在所有 cpp 提交中擊敗了67.36% 的使用者

記憶體消耗 :8.3 mb, 在所有 cpp 提交中擊敗了92.02%的使用者

鍊錶的中間結點

題目 給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnode ...

鍊錶的中間結點

給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnode 型別的...

鍊錶的中間結點

給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnode 型別的...