Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
Example 1:
Input: 1->2->3->3->4->4->5 Output: 1->2->5
Example 2:
Input: 1->1->1->2->3 Output: 2->3
最近写的最难过的一个题
自己设的是哪个指针,各种if弄得头晕脑胀
想象这个场景
之前纠结的,要记录前一个指针的要求
完全可以比较的时候,比较的就是next元素的数值啊
所以两个指针足够了
另外一个让我纠结的点是:如何判断当前的点是不是重复 要不要删除呢
可以比较这两个指针是不是相邻即可
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head==NULL)
return head;
ListNode *d=new ListNode(-1);
d->next=head;
ListNode *curr=head;
ListNode *pre=d;
while(curr!=NULL)
{
while(curr->next!=NULL&&pre->next->val==curr->next->val)
{
curr=curr->next;
}
if(pre->next==curr)
pre=curr;
else
pre->next=curr->next;
curr=curr->next;
}
return d->next;
}
};