leetcode19 刪除鏈表的倒數第N個節點(邊界注意)

題目

給定一個鏈表,刪除鏈表的倒數第 n 個節點,並且返回鏈表的頭結點。

示例:

給定一個鏈表: 1->2->3->4->5, 和 n = 2.

當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5.
說明:

給定的 n 保證是有效的。

 

思路:

注意刪除頭和尾的情況,這裏使用一個虛擬頭結點來解決

使用快慢指針,O(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) return head;
        ListNode* dummy_head = new ListNode(-1);
        ListNode* slow = dummy_head,*fast = dummy_head;
        dummy_head->next = head;
        while(n){
            fast = fast->next;
            n--;
        }
        while(fast->next){
            fast = fast->next;
            slow = slow->next;
        }
        slow->next = slow->next->next;
        return dummy_head->next;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章