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