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

Leetcode | Remove Duplicates from Sorted List I && II

时间:2014-05-18 01:41:31      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   class   code   c   

Remove Duplicates from Sorted List I

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

如果下一个节点和当前节点的值一样,就继续往后。这样找到的是重复数的最后一个。比如1->1->2; 

当然也可以找到重复数的第一个数;

注意delete掉那些重复的点。

bubuko.com,布布扣
 1 class Solution {
 2 public:
 3     ListNode *deleteDuplicates(ListNode *head) {
 4         ListNode *p = head, *newH = NULL, *tail, *tmp;
 5         while (p != NULL) {
 6             while (p->next != NULL && p->next->val == p->val) {
 7                 tmp = p->next; 
 8                 delete p;
 9                 p = tmp;
10             }
11             if (newH == NULL) {
12                 newH = p;
13             } else {
14                 tail->next = p; 
15             }
16             tail = p;
17             p = p->next;
18         }
19         return newH;
20     }
21 };
bubuko.com,布布扣

Remove Duplicates from Sorted List II

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

和Remove Duplicates from Sorted List I类似。加了一个判断是否重复数的条件。最后tail要指向NULL,因为原链表最后一个元素不一定会加进来。

这道题用c++很奇怪。下面的代码没有delete是可以accepted的。

bubuko.com,布布扣
 1 class Solution {
 2 public:
 3     ListNode *deleteDuplicates(ListNode *head) {
 4         ListNode *p = head, *newH = NULL, *tail, *current, *tmp;
 5         while (p != NULL) {
 6             current = p;
 7             while (p->next != NULL && p->next->val == p->val) p = p->next;
 8             if (p == current) {
 9                 if (newH == NULL) {
10                     newH = p;
11                 } else {
12                     tail->next = p; 
13                 }
14                 tail = p;
15             }
16             p = p->next;
17         }
18         if (tail) tail->next = NULL;
19         return newH;
20     }
21 };
bubuko.com,布布扣

但是加了delete的逻辑之后就runtime error了。这份代码应该是没有问题的。难道是leetcode自己有问题?

bubuko.com,布布扣
 1 class Solution {
 2 public:
 3     ListNode *deleteDuplicates(ListNode *head) {
 4         ListNode *p = head, *newH = NULL, *tail, *current, *tmp;
 5         while (p != NULL) {
 6             current = p;
 7             while (p->next != NULL && p->next->val == p->val) {
 8                 tmp = p->next; 
 9                 delete p;
10                 p = tmp;
11             }
12             tmp = p->next;
13             if (p == current) {
14                 if (newH == NULL) {
15                     newH = p;
16                 } else {
17                     tail->next = p; 
18                 }
19                 tail = p;
20             } else {
21                 delete p;
22             }
23             p = tmp;
24         }
25         if (tail) tail->next = NULL;
26         return newH;
27     }
28 };
bubuko.com,布布扣

 

Leetcode | Remove Duplicates from Sorted List I && II,布布扣,bubuko.com

Leetcode | Remove Duplicates from Sorted List I && II

标签:des   style   blog   class   code   c   

原文地址:http://www.cnblogs.com/linyx/p/3734084.html

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