輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個鍊錶的倒數第3個節點是值為4的節點。
第一種做法,簡單,就是先遍歷鍊錶長度,然後輸出正向的第n-k+1個。
class
solution
(object):
defgetkthfromend
(self, head, k)
:"""
:type head: listnode
:type k: int
:rtype: listnode
"""ifnot head:
return
a =0 phead = head
phead1 = head
while phead !=
none
: a +=
1 phead = phead.
next
for i in
range(1
,a-k+1)
: phead1 = phead1.
next
return phead1
第二種做法是,通過雙指標,也就是兩個指標相間隔k,如果後面的指標先到了最後,前面的指標也就到達了倒數第k個。
想法雖簡單,但是可能會弄錯位置!
結束條件是 phead1.next != none。
如果是 phead1 != none ,則後面的指標已經超過了原來的鍊錶,不是最後乙個結點。
class
solution
(object):
defgetkthfromend
(self, head, k):if
not head:
return
phead1, phead2 = head, head
a =1while a < k:
phead1 =phead1.
next
if phead1 ==
none
:return
a +=
1while phead1.
next
!=none
: phead2 = phead2.
next
phead1 = phead1.
next
return phead2
鍊錶中倒數第k個節點
題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。struct listnode方法 定義兩個指標。第乙個指標從鍊錶的頭指標開始遍歷向前走k 1,第二個指標保持不動 從第k步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k 1,當第乙個 走在前面的 指標到達鍊錶的尾結點時,第二...
鍊錶中倒數第k個節點
輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。ac class solution def findkthtotail self,head,k write code here 將每個節點存在棧裡,選取stack中第k個值 stack while head head head.next if k len s...
鍊錶中倒數第k個節點
acwing打卡活動 劍指offer 打卡活動 周二第十題 鍊錶中倒數第k個節點 definition for singly linked list.public class listnode 思路 設列表總結點數為n,則n k 1 為該列表的倒數第k個節點 如 n 10,k 2,則 10 2 1 ...