首页 > 代码库 > [LeetCode] 19. Remove Nth Node From End of List

[LeetCode] 19. Remove Nth Node From End of List

Given a linked list, remove the nth 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.

 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         ListNode *dummy = new ListNode(0);13         dummy->next = head;14         ListNode *ret = NULL;15         ListNode *prev = dummy;16         17         ListNode *p1 = head;18         ListNode *p2 = head;19         int counter = 0;20         21         while (p2){22             p2 = p2->next;23             counter++;24             if (counter == n){25                 break;26             }27         }28         29         if (counter < n){30             delete dummy;31             return head;32         }33         34         while(p2){35             p1 = p1->next;36             p2 = p2->next;37             prev = prev->next;38         }39         40         prev->next = p1->next;41         42         ret = dummy->next;43         delete dummy;44         return ret;45     }46 };

 

[LeetCode] 19. Remove Nth Node From End of List