码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 19 Remove Nth Node From End of List

时间:2015-12-04 20:31:18      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

Remove Nth Node From End of List

O(n)复杂度

1.新建一个头节点作为虚拟头部,这样在删除过程中就不需要考虑一些特殊的情况(删除的就是第一个节点)
2.用两个指针p和q,当p已经走了n步的时候,在让pq都同时往后走,当p走到头为NULL的时候,q指向的就是倒数第n个数,过程中记录父亲节点,直接修改指针即可
 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 *p, *q,*pre;
13         ListNode * node = new ListNode(0); //增加一个虚拟的头节点
14         node->next = head;
15         pre = node;
16         p = q = head;
17         if(head==NULL) return NULL;
18         int i=0;
19         //这里加一个头节点方便理解,方便删除
20         //用两个指针p和q,当p已经走了n步的时候,在让pq都同时往后走,当p走到头为NULL的时候,q指向的就是倒数第n个数
21         //过程中记录父亲节点,直接修改指针即可
22         while(p!=NULL){
23             if(i>=n){
24                 pre = q;
25                 q= q->next;
26             }
27             i++;
28             p=p->next;
29         }
30         pre->next = q->next;
31         free(q);
32         return node->next;
33     }
34 };

 

LeetCode 19 Remove Nth Node From End of List

标签:

原文地址:http://www.cnblogs.com/ackerzju/p/5020050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!