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

leetcode Remove Nth Node From End of List

时间:2015-04-13 16:07:53      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

这个题如果按照正常想法,一般是两边遍历,第一遍是计算链表的长度;然后确定倒数第n个节点的正序号,然后访问即可。

好一点的方法是找一个指针p指向头结点后的n+1个节点,然后同时对头结点和p向后移动,如果p=Null了,这时head指针就恰好指向倒数第n+1个节点。这里有个问题,假如n恰好等于链表的长度,显然这时head指针指向了head节点,并没有指向head节点的前驱,那代码中的这一句可以解决这个问题,即在没有到n+1判断就到了NUll即是这种情况。

 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 *end = head;
13     ListNode *F = head;
14     int i = 0;
15     while (end != NULL&&i<n+1)
16     {
17         end = end->next;
18         i++;
19         if (end == NULL&&i<n+1)
20             return head = head->next;
21     }
22     while (end != NULL)
23     {
24         head = head->next;
25         end = end->next;
26     }
27     head->next = head->next->next;
28     return F;
29 }
30     };

 

leetcode Remove Nth Node From End of List

标签:

原文地址:http://www.cnblogs.com/chaiwentao/p/4422295.html

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