找出單鏈表中的倒數第k個元素,例如,1->2->3->4->5->6->7,則其倒數第三個元素為5
方法一根據問題特點我們很自然的想到先把鍊錶遍歷一遍得出鍊錶的長度,然後順求第k−n
k-nk−
n個元素,但是這需把鍊錶遍歷兩次。
方法二快慢指標法,將快指標提前移動k
kk個位置然後一起同時移動快慢指標,當快指標遍歷完了之後,此時慢指標的位置即為倒數第k
kk個元素的位置。
class
node
:def
__init__
(self,data=
none
,next
=none):
self.data = data
self.
next
=next
# 列印節點函式
defprintlist
(head)
: cur=head.
next
while cur!=
none
:print
(cur.data)
cur=cur.
next
defbuild()
: i =
1 head = node(
) temp =
none
cur = head
while i<8:
temp=node(
) temp.data=i
cur.
next
= temp
cur = cur.
next
i +=
1return head
# 找出第k個節點的值
deffindk
(head,k)
:if head ==
none
or head.
next
==none
:return
none
slow = node(
) fast = node(
) slow = head.
next
fast = head.
next
i =0while inone
: fast = fast.
next
i +=
1if ireturn
none
while fast!=
none
: slow=slow.
next
fast=fast.
next
return slow
if __name__ ==
"__main__"
: head = build(
) result =
none
print
("鍊錶:"
) printlist(head)
result=findk(head,3)
if result!=
none
:print
("\n鍊錶倒數第3個元素為:"
+str
(result.data)
)
《劍指offer》
《python程式設計師面試演算法寶典》
鍊錶中倒數第k個元素
時間限制 1秒 空間限制 32768k 熱度指數 301751 本題知識點 鍊錶輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。class solution while phead next null return ptail 解題思路 傳統方法是從左到右遍歷一遍,得出鍊錶中的結點總數,然後計算倒數第k個...
1 5尋找倒數第k個元素
方法一 將單鏈表逆置,變換成尋找正數第k個元素 方法二 快慢指標法,快指標比慢指標快k個節點,當快指標到達尾節點時,慢指標為倒數第k個節點 方法三 順序遍歷兩次鍊錶法,第一次遍歷求出鍊錶長度n,將尋找倒數第k個元素轉換成尋找正數第n k個元素 實現方法二 coding utf 8 author 圖南...
找出鍊錶倒數第K個元素
思路 可設兩個頭指標p1和p2,當p2開始向前走,當走的步數為k時,p1開始走,此時當p2走到結尾時,p1所指的位置正好為倒數第k個元素的位置 class listnode override public string tostring return sb.tostring public stati...