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