地址 https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/node
給定一個鏈表,刪除鏈表的倒數第 n 個節點,而且返回鏈表的頭結點。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; } };