删除链表的中间节点和a/b处的节点
題目:
? ? ? ?給定鏈表的頭節點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 -> 5k,假設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,不刪除任何節點
?
基本思路
原問題。?
觀察題目,我們可以發現,鏈表長度每增加2,要刪除的節點就往后移動一位。我們只要利用這個規律找到要刪除節點的前一個節點,問題就解決了。
進階問題。?
首先,根據鏈表的長度n,以及a與b的值確定要刪除的節點是哪一個節點。計算方法如下:?
r = math.ceil(a / b * n),其中ceil函數是向上取整,a / b的值是浮點型。?
知道要刪除哪一個節點后,只需要找到該節點的前一個節點即可。
?
?
總結
以上是生活随笔為你收集整理的删除链表的中间节点和a/b处的节点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在单链表和双链表中删除倒数第K个节点
- 下一篇: 反转部分单向链表