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 class Solution {
 2 public:
 3     ListNode *removeNthFromEnd(ListNode *head, int n) {
 4     
 5         int i=0;
 6         int j;
 7           ListNode *s=new ListNode(0);
 8            s->next = head;
 9         ListNode *p=s;
10       
11         //ListNode* dumy = new ListNode(0);
12        
13         ListNode *q=s;
14         //p=head;
15         //q=head;
16    
17         while(i<n)
18         {
19             p=p->next;
20             i++;
21             
22         }
23         
24         while(p->next!=NULL)
25         {
26             p=p->next;
27             q=q->next;
28         }
29 
30         q->next=q->next->next;
31 
32        
33         return s->next;
34     }
35 };

 

posted on 2015-05-18 13:33  黄瓜小肥皂  阅读(123)  评论(0编辑  收藏  举报