leetcode:Remove Nth Node From End of List

一、     題目

給定一個單鏈表,刪除倒數第n個節點,返回刪除了的鏈表。

例如: 已知: 1->2->3->4->5,  n = 2.

處理後:1->2->3->5.

      試着遍歷一次完成。

二、     分析

看到這道題我第一感覺就是雙指針,因爲要刪除倒數第n個數,所以兩個指針的間距也就是這個n,當右邊的指針到達末尾處時,那麼左指針的下一個指針就是要刪除的節點。其實會有下面幾種特殊情況:

1、{1,2},n=1;

2、{1,2},n=2;

3、{},0

當然,有人可能會說n可不可以大於節點數,不過這個題目已經限制了n是有效的。

擴展:1、n的值不限制

           2、鏈表不限於單鏈表,求刪除離頭節點倒數n個

 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *removeNthFromEnd(ListNode *head, int n) {
    	if(head==NULL||head->next==NULL) return NULL;
    	
    	ListNode *Rnode = head;
    	ListNode *Lnode = head;
    	
        for(int i=1; i<=n; i++){
        	Rnode = Rnode->next;
        } 
        if(Rnode==NULL){
        	head = head->next;
        	return head;
        }
        while(Rnode->next!=NULL){
        	Lnode = Lnode->next;
        	Rnode = Rnode->next;
        }
    	Lnode->next = Lnode->next->next;
        return head;
    }
};

發佈了164 篇原創文章 · 獲贊 18 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章