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
.
这个题目坑了我挺久的,开始各种条件判断不正确,改了好久终于AC了。。思维比较混乱
/**
* 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 || head->next == NULL)
return head;
ListNode* t = new ListNode(0);
t->next = head;
ListNode* pre = t;
ListNode* p =t;
ListNode* curr = head;
ListNode* post = curr->next;
while (post != NULL)
{
if (post->val != curr->val)
{
pre = pre->next;
post = post->next;
curr = curr->next;
if (post == NULL)
return p->next;
}
if (post->val == curr->val)
{
while (post->val == curr->val)
{
post = post->next;
if (post == NULL)
{
pre->next = NULL;
return p->next;
}
}
curr = post;
pre->next = curr;
post = post->next;
}
}
return p->next;
}
};