1. 程式人生 > >[Leetcode] remove nth node from the end of list 刪除鏈表倒數第n各節點

[Leetcode] remove nth node from the end of list 刪除鏈表倒數第n各節點

truct def 倒數 move col lis remove str class

Given a linked list, remove the n th node from the end of list and return its head.

For example,

   Given linked list: 1->2->3->4->5, and n = 2.

   After removing the second node from the end, the linked list becomes 1->2->3->5.

Note:
Given n will always be valid.
Try to do this in one pass.

這題比較簡單,使用快慢指針,找到倒數第n個結點的前驅即可,然後連接其前驅和後繼即可,值得註意的是,兩個while的條件之間的關系。代碼如下:

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode *removeNthFromEnd(ListNode *head, int
n) 12 { 13 ListNode *nList=new ListNode(-1); 14 nList->next=head; 15 ListNode *pre=nList; 16 ListNode *fast=head; 17 ListNode *slow=head; 18 int num=0; 19 20 while(num++<n) 21 { 22 fast=fast->next; 23 }
24 while(fast->next) 25 { 26 pre=pre->next; 27 slow=slow->next; 28 fast=fast->next; 29 } 30 pre->next=slow->next; 31 32 return nList->next; 33 } 34 };

[Leetcode] remove nth node from the end of list 刪除鏈表倒數第n各節點