題目:
給定乙個鍊錶,刪除其中倒數第k個結點。
**:
class
linkedlistalgorithms
(object):
def__init__
(self):
pass
defrm_last_kth_node
(self, k, linked_list):
# 刪除倒數第 k 個節點,針對單鏈表的
if linked_list.is_empty():
print
'the given linked_list is empty.'
if k < 1
or k > linked_list.get_length():
print
'wrong kth number out of index.'
k = linked_list.get_length() - k
if k == 0:
p = linked_list.head
linked_list.head = p.next
else:
p = linked_list.head
for i in xrange(k-1):
p = p.next
p.next = p.next.next
分析:
在這個函式中,我又一次寫了從單鏈表中刪除乙個結點的**,事實上不需要,因為我在實現單鏈錶類的時候已經寫過了刪除乙個結點的方法了。python版本單鏈表實現**時間複雜度就是一遍迴圈鍊錶,空間複雜度用到了乙個指標。
如果是雙鏈表的話,複雜度並沒降低,畢竟仍然要一遍迴圈。
刪除單鏈表倒數第K個節點
有p1,p2兩個指標,p1從頭開始跑,先跑k個節點,然後p2開始跑,當p1跑到頭時,p2指向的就是倒數第k個節點了。這道題的思路比較簡單,要想做得更好,可以加入一些魯棒性的考慮,比如說空鍊錶情況,鍊錶長度小於k等。下面是 include struct node class solution if k...
在單鏈表和雙鏈表中刪除倒數第K個節點
分別實現兩個函式,乙個可以刪除單鏈表中倒數第k個節點,另乙個可以刪除雙鏈表中倒數第k個節點。如果鍊錶長度為n,則要時間複雜度達到o n 額外空間複雜度達到o 1 一種方法是設定快慢指標,快指標先走k步,此時慢指標從頭開始走,兩者同時開始走,當快指標走到尾時,慢指標走到倒數第k個節點,刪除當前慢指標的...
在單鏈表和雙鏈表中刪除倒數第K個節點
說明 本文是左程雲老師所著的 程式設計師面試 指南 第二章中 在單鏈表和雙鏈表中刪除倒數第k個節點 這一題目的c 復現。感謝左程雲老師的支援。題目 分別實現兩個函式,乙個可以刪除單鏈表中倒數第 k 個節點,另乙個可以刪除雙鏈表中倒數第 k 個節點。要求 如果鍊錶長度為 n,時間複雜度達到 o n 額...