鍊錶 尋找 刪除單向鍊錶的倒數第K個節點

2021-10-07 05:32:00 字數 2457 閱讀 7335

通過設定快、慢兩個指標,可以通過一次遍歷得到單向鍊錶的倒數第k個節點。

但兩個問題有著較為明顯的區別:

(1)對於尋找倒數第k個節點,慢指標慢於快指標第k-1步前進。

(2)對於刪除倒數第k個節點,為了保證得到刪除節點父節點的資訊,慢指標要慢於快指標第k步前進。

(3)兩者均要注意當鍊表長度不足時邊界條件的定義。對於刪除問題,尤其要注意刪除第乙個元素(倒數第n個)時,鍊錶head指標的調整。

# 定義單向鍊錶

class

node

(object):

def__init__

(self, value)

: self.value = value

self.

next

=none

def__repr__

(self)

:return f'node()'

class

linklist

(object):

def__init__

(self)

: self.head =

none

def__repr__

(self):if

not self.head:

return

none

nodelist =

node = self.head

while node:

) node = node.

next

return

"-->"

.join(nodelist)

defadd_rear

(self, value):if

not self.head:

self.head = node(value)

else

: node = self.head

while node.

next

: node = node.

next

node.

next

= node(value)

1. 尋找倒數第k個節點
def

findlastk

(head:

[none

, node]

, k)

:"""

head: 頭指標

k:倒數第k個

"""if head is

none

or k <=0:

return

none

ahead, bhead = head, head # type: node, 快、慢指標初始均指向煉表頭指標

for i in

range

(k-1):

ahead = ahead.

next

if ahead is

none

:return

none

while ahead.

next

: ahead = ahead.

next

bhead = bhead.

next

return bhead

2. 刪除倒數第k個節點
def

dellastk

(linklist:

[none

, linklist]

, k)

:if linklist is

none

or k <=0:

return

none

ahead, bhead = linklist.head, linklist.head # type: node, 快、慢指標初始值均為鍊錶的頭指標

for i in

range

(k):

# 快指標領先k步

if ahead is

none

:return

none

ahead = ahead.

next

if ahead is

none

:# 邊界條件,此時刪除鍊錶第乙個元素,head指標需要重新設定

linklist.head = bhead.

next

else

:while ahead.

next

:# 刪除節點的父節點直接指向刪除節點的子節點

ahead = ahead.

next

bhead = bhead.

next

bhead.

next

= bhead.

next

.next

return linklist

鍊錶刪除倒數第k結點

思想 快指標先走到第k個結點。然後快慢指標一起往後走,當快指標指向最後乙個結點的時候,慢指標就是倒數第k個結點 刪除倒數第k個結點 public static node deletelastkth node list,int k k過大,已經走到末尾了 if fast null return lis...

單向鍊錶中倒數第k個值

本文參考書籍 劍指offer 作者何海濤 01 題目輸入乙個單向鍊錶,輸出該鍊錶中倒數第k個結點。如乙個鍊錶中有6個結點,1,2,3,4,5,6 這個鍊錶的倒數第三個節點是值為4的結點。鍊錶結構如下 02 解題 解法1 獲取鍊錶的第k個值,如果可以知道鍊錶長度n,那麼可以知道從0開始第n k的值是要...

單行鍊錶尋找倒數第k個節點

題目介紹 給出乙個單向鍊錶,輸出該鍊錶的倒數第k個節點 設尾節點開始從0編號 解題思路 兩個指標往後移動,一定要注意邊界的處理情況。此處我設定了乙個頭指標,頭指標不存資料,僅僅作為頭標誌。題目介紹 給出乙個單向鍊錶,輸出該鍊錶的倒數第k個節點 設尾節點開始從0編號 include include i...