leetcode 19 刪除鏈表的倒數第N個節點

地址 https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/node

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

示例:

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

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

說明:指針

給定的 n 保證是有效的。code

進階:blog

你能嘗試使用一趟掃描實現嗎?leetcode

 

解法 使用快慢指針  一個先出發 一個n次迭代後出發  先出髮指針指向結尾 那麼後出發指針就是要刪除的節點rem

注意邊界get

代碼it

/**
 * 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) {
        ListNode* p1 = head; ListNode* p2 = head;
        for(int i =0;i < n;i++){
            p1 = p1->next;
        }
        
        if(p1 == NULL) return p2->next;
        
        while(p1->next != NULL){
            p1=p1->next; p2 = p2->next;
        }
        
        p2->next = p2->next->next;
         
        
        return head;
    }
};
相關文章
相關標籤/搜索