leetcode Remove Duplicates from Sorted List

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.

 

Subscribe to see which companies asked this question

 
这道题也是比较简单,虽然有的时候你有了一个思路,但是实现的过程中也许有很多小的细节,你不会注意到。
就比如这道题刚开始我的思路是,用一个指针p来指向要判断的节点,而另一个指针q指向第二个与其不同的节点,那么就有q存不存在的问题,如果q不存在,我们就可以返回了。说明p后面没有和它不同的节点了。
如果q存在,我们需要整体的后移一个,直至找到最后一个节点。说起来比较容易,但是,要判断谁是不是空,什么时候结束,需要理智和清晰的判断。
 
 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* deleteDuplicates(ListNode* head) {
12         if(head==NULL) return NULL;
13         ListNode* p,*q;
14         p=head;
15         q=p->next;
16         while(q!=NULL){
17             while(q->val==p->val)
18             {
19                 if(q->next!=NULL) 
20                     q=q->next;
21                 else {
22                     p->next=NULL;
23                     return head;}
24             }
25             p->next=q;
26             p=q;
27             q=p->next;
28             
29         }
30         
31         return head;
32         }
33         
34 };

 

posted @ 2015-11-18 14:10  0giant  阅读(166)  评论(0编辑  收藏  举报