您的位置:首页 > Web前端 > Node.js

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

2014-04-18 08:31 435 查看
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.

Two ideas:

1. scan the list from head to end, record the length of it, Then, the nth node from the end of list is the length - n from the head, then, delete it.

2. use two pointers, one scans firstly to N, then, the second pointer goes with the first one, the span between them will be N, Then, when the first pointer go to the end. The second one will point to Nth node.

/**
* 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 == nullptr) return head;

ListNode *cur = head, *end = head;
ListNode *temp = new ListNode(-1); //trick1
temp -> next = head;
head = temp;                       //trick2

int m = 0;
while(end->next != NULL){
m++;
end = end -> next;
if(m >= n){
cur = cur -> next;
temp = temp->next;
}
}

temp -> next = cur -> next;
delete cur;

return head -> next;

}
};





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode Linked List