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
.
设置头辅助指针,非常简易。
/**
* 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) {
ListNode* newHead=new ListNode(-1);//设置辅助头结点
newHead->next=head;
ListNode* preHead=newHead;
ListNode* curHead=head;
while(curHead)
{
while(curHead->next&&curHead->val==curHead->next->val)
curHead=curHead->next;
if(preHead->next==curHead)
preHead=preHead->next;
else
{
preHead->next=curHead->next;
}
curHead=curHead->next;
}
return newHead->next;
}
};