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 };