单向链表操作之删除倒数第n个结点
生活随笔
收集整理的這篇文章主要介紹了
单向链表操作之删除倒数第n个结点
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
關(guān)鍵在于倒數(shù)第n個(gè)結(jié)點(diǎn),如果讓刪除第幾個(gè)結(jié)點(diǎn)還是很簡(jiǎn)單的。所以可以想辦法將倒數(shù)第幾個(gè)結(jié)點(diǎn)轉(zhuǎn)換成正數(shù)的第幾個(gè)結(jié)點(diǎn),但是題目中并沒有給出一共多少個(gè)數(shù),所以不太好轉(zhuǎn)化,我們可以利用雙指針來操作。利用頭指針和尾指針操作,先讓尾指針移動(dòng)到第n個(gè)結(jié)點(diǎn)處,然后再把頭指針和此時(shí)的尾指針一塊移到最后。這樣,尾指針就統(tǒng)計(jì)了鏈表的長(zhǎng)度。尾指針一共走了兩端,第一端走了n個(gè)路程,第二段一共走了總數(shù)-n個(gè)路程,而此時(shí)頭結(jié)點(diǎn)是陪著尾指針走的。
class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {// pst 是長(zhǎng)度為(n+1)的鏈表的頭指針,pen 是長(zhǎng)度為(n+1)的鏈表的尾指針ListNode* pst = head;ListNode* pen = head;for(int i = 0; i < n; i ++)pen = pen -> next;// 特殊處理,如果 pen == NULL 說明刪除的是第一個(gè)結(jié)點(diǎn),直接返回 head -> nextif(pen == NULL) return (head -> next);// pst 與 pen 同步后移while(pen -> next != NULL){pst = pst -> next;pen = pen -> next;}// 刪除節(jié)點(diǎn)pst -> next = pst -> next -> next;return head;} };?
總結(jié)
以上是生活随笔為你收集整理的单向链表操作之删除倒数第n个结点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python滚动条自动向下,python
- 下一篇: java dump分析工具_Java虚拟