給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。
如果有兩個中間結點,則返回第二個中間結點。
示例:
輸入:[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.
輸入:[1,2,3,4,5,6]
輸出:此列表中的結點 4 (序列化形式:[4,5,6])
由於該列表有兩個中間結點,值分別為 3 和 4,我們返回第二個結點。
使用快慢指標。slow 和 fast 都從煉表頭 head 出發,slow 每次走一步,fast 每次走兩步,當 fast 為空時,slow 就是中間節點。**如下:
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
return slow;
}};
上面的那種寫法在鍊錶長度是偶數的情況下,返回的中間兩個節點的後乙個節點。如果想返回前乙個節點,則只需要將迴圈的條件fast!=nullptr && fast->next!=nullptr
改成fast->next!=nullptr && fast->next->next!=nullptr
:
class solution
return slow;
}};
還有一種方法就是先求鍊錶的長度 n,然後再從頭遍歷到第 n/2 個節點即可。
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
return curnode->next;
}int getlen(listnode* head)
return len;
}};
思路 1 拓展參考了:solution/kuai-man-zhi-zhen-zhu-yao-zai-yu-diao-shi-by-liwei/ LeetCode鍊錶 876鍊錶的中間節點
給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnode 型別的...
leetcode 鍊錶的中間節點
leetcode 876 題目 給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回...
leetcode 鍊錶 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?head null 空鍊錶,回文,返回true head.next null 只有乙個節點的列表,回文,返回tru...