鍊錶中倒數第K個節點

2021-10-16 12:27:46 字數 2202 閱讀 9228

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

其實這個解法和我們的上一題類似,就是使用乙個陣列來儲存每個節點,最後我們輸出第 len(list) - k 個節點即可

while node:

list

node = node.

next

# k比鍊錶長度大

if k >

len(

list):

return

none

return

list

[len

(list

)- k]

完整**

# 鍊錶中倒數第k個節點

# 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

# 鍊錶結構

class

listnode

:def

__init__

(self, x)

: self.val = x

self.

next

=none

# 列印鍊錶

defprintchain

(head)

: node = head

while node:

print

(node.val)

node = node.

next

class

solution

:def

findkthtotail

(self, head, k)

:if k <=

0or head ==

:return

none

node = head

list=[

]while node:

list

node = node.

next

# k比鍊錶長度大

if k >

len(

list):

return

none

return

list

[len

(list

)- k]

if __name__ ==

'__main__'

:# 建立鍊錶

l1 = listnode(1)

l2 = listnode(2)

l3 = listnode(3)

l4 = listnode(4)

l5 = listnode(5)

l1.next

= l2

l2.next

= l3

l3.next

= l4

l4.next

= l5

print

(solution(

).findkthtotail(l1,1)

)

第二種方式就是我們需要使用兩個指標,第乙個指標先走k步,然後兩個指標在同時行走,最後當第乙個指標到達終點的時候,第二個指標就是倒數第k個值。

完整**

class

solution

:def

findkthtotail

(self, head, k)

:if k <=

0or head ==

:return

none

list=[

] first = head

second = head

# 先讓第乙個節點走 k步

for i in

range(0

, k)

:# 判斷第乙個是否走完

if first ==

none

:return

none

first = first.

next

# 然後兩個節點在繼續走,當first走到頭的時候,second就是倒數第k個節點

while first:

first = first.

next

second = second.

next

return second

鍊錶中倒數第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 ...