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 };