2.3 刪除鏈表的中間節點和a/b處的節點
阿新 • • 發佈:2018-10-22
emp ren fir length klist != turn then 刪除結點
題目:給定鏈表的頭結點head,實現刪除鏈表的中間節點的函數
例如:
1,不刪除任何節點;
1 --> 2,刪除節點1;
1 --> 2 --> 3,刪除節點2;
1 --> 2 --> 3 --> 4,刪除節點2;
1 --> 2 --> 3 --> 4 --> 5,刪除節點3;
進階:
給定鏈表的頭節點head,整數a和b, 實現刪除位於a/b處節點的函數
例如:
鏈表: 1 --> 2 --> 3 --> 4 --> 5,假設a/b的值為r
如果r等於0,不刪除任何節點;
如果r在區間(0, 1/5]上,刪除節點1;
如果r在區間(1/5, 2/5]上,刪除節點2;
如果r在區間(2/5, 3/5]上,刪除節點3;
如果r在區間(3/5, 4/5]上,刪除節點4;
如果r在區間(4/5, 1]上,刪除節點5;
如果r大於1,不刪除任何節點
My:
1 def del_midnode(L): 2 if L.length > 1: 3 L.delt((L.length+1)//2)
Reference:
1 def del_midnode(L): 2 p = L.head 3 # if linklist is empty or only have one node4 if p.next == None or p.next.next == None: 5 return 6 # if linklist only have two nodes, then delete the first 7 if p.next.next.next == None: 8 p.next = p.next.next 9 return 10 # if linklist has not less than three nodes 11 pre = p.next 12 cur = pre.next.next13 while cur.next != None and cur.next.next != None: 14 pre = pre.next 15 cur = cur.next.next 16 pre.next = pre.next.next
思想:如果鏈表為空或者長度為1, 則不刪除任何結點;如果鏈表長度為2,將頭結點刪除;如果鏈表長度不少於3:當長度為3,則刪除結點2;當長度為4,則刪除結點2;當長度為5,則刪除結點3......從以上分析可看出,當鏈表長度大於3時,鏈表長度每增加2(3, 5, 7...),要刪除的節點就後移一個位置。
2.3 刪除鏈表的中間節點和a/b處的節點