首页 > 其他 > 详细

LeetCode OJ - Remove Nth Node From End of List

时间:2014-07-07 19:00:37      阅读:318      评论:0      收藏:0      [点我收藏+]

题目:

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 struct ListNode {
 2     int val;
 3     ListNode *next;
 4     ListNode(int x) : val(x), next(NULL) {}
 5 };
 6 
 7 class Solution {
 8 public:
 9     ListNode *removeNthFromEnd(ListNode *head, int n) {
10         if (head == NULL) return NULL;
11 
12         ListNode *pre = head, *slow = head, *quick = head;
13         for (int i = 1; i <= n; i++) quick = quick->next;
14 
15         while (quick != NULL) {
16             pre = slow;
17             slow = slow->next;
18             quick = quick->next;
19         }
20         if (slow != head) {
21             pre->next = slow->next;
22             delete slow;
23             slow = NULL;
24         }
25         else {
26             head = slow->next;
27             delete slow;
28         }
29         return head;
30     }
31 };

 

LeetCode OJ - Remove Nth Node From End of List,布布扣,bubuko.com

LeetCode OJ - Remove Nth Node From End of List

原文:http://www.cnblogs.com/dongguangqing/p/3813430.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!