19 Remove Nth Node From End of List(去掉链表中倒数第n个节点Easy)

题目意思:去掉链表中倒数第n个节点

思路:1.两次遍历,没什么技术含量,第一次遍历计算长度,第二次遍历找到倒数第k个,代码不写了

     2.一次遍历,两个指针,用指针间的距离去计算。

  ps:特别注意删掉第一个节点的情况,在前面加个头结点,则变为了删除第二个节点的情况

 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         if(head==NULL||n==0)return NULL;
13         ListNode* ans=new ListNode(0);
14         ans->next=head;                             //加了一个头结点
15         ListNode *p1,*p2;
16         p1=p2=ans;
17         for(int i=0;i<n;++i){                       //p2指向第n+1个节点
18                 p2=p2->next;
19         }
20         while(p2->next){                            //p2指向最后一个,p1指向倒数第n-1个
21             p2=p2->next;
22             p1=p1->next;
23         }
24         p1->next=p1->next->next;                    //删掉倒数第n个节点
25         return ans->next;
26     }
27 };

 

posted @ 2015-06-14 15:27  影翕  阅读(150)  评论(0编辑  收藏  举报