【題目描述】
Given a linked list, remove the nth node from the end of list and return its head.
【注】The minimum number of nodes in list is?n.
給定一個(gè)鏈表呆躲,刪除鏈表中倒數(shù)第n個(gè)節(jié)點(diǎn)舆床,返回鏈表的頭節(jié)點(diǎn)。
【注】鏈表中的節(jié)點(diǎn)個(gè)數(shù)大于等于n
【題目鏈接】
www.lintcode.com/en/problem/remove-nth-node-from-end-of-list/
【題目解析】
此題可用雙指針來解決祠乃。
首先讓faster從起始點(diǎn)往后跑n步。再讓slower和faster一起跑覆获,直到faster==null時(shí)候率拒,slower所指向的node就是需要刪除的節(jié)點(diǎn)。
注意迈螟,一般鏈表刪除節(jié)點(diǎn)時(shí)候叉抡,需要維護(hù)一個(gè)prev指針,指向需要刪除節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)答毫。
為了方便起見褥民,當(dāng)讓slower和faster同時(shí)一起跑時(shí),就不讓 faster跑到null了洗搂,讓他停在上一步消返,faster.next==null時(shí)候,這樣slower就正好指向要刪除節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)耘拇,充當(dāng)了prev指針撵颊。這樣一來,就很容易做刪除操作了惫叛。
slower.next = slower.next.next(類似于prev.next = prev.next.next)倡勇。
同時(shí),這里還要注意對刪除頭結(jié)點(diǎn)的單獨(dú)處理嘉涌,要刪除頭結(jié)點(diǎn)時(shí)妻熊,沒辦法維護(hù)prev節(jié)點(diǎn),所以當(dāng)發(fā)現(xiàn)要刪除的是頭結(jié)點(diǎn)時(shí)洛心,直接讓head = head.next并return head即可固耘。
【參考答案】
www.jiuzhang.com/solutions/remove-nth-node-from-end-of-list/