您的位置:首页 > 其它

Leetcode# 82 Remove Duplicates from Sorted List II

2015-08-02 00:50 375 查看
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
.

Difficulty: Medium

对链表还是很不熟悉,语言也不够简练,今后改进!

ListNode* deleteDuplicates(ListNode* head) {
if(head==NULL)
return head;
if(head->next==NULL)
return head;
else if(head->next->next==NULL&&head->val!=head->next->val)
return head;
else if(head->next->next==NULL&&head->val==head->next->val)
{
head = NULL;
return head;
}
int flag = 0;
ListNode* head1 = NULL;
ListNode* pre = NULL;
ListNode* p = head;
ListNode* pNext;

while(p->next->next!=NULL)
{
pNext = p->next;
if(p->val==pNext->val&&pNext->val!=pNext->next->val)
p = pNext->next;

else if(p->val==pNext->val&&pNext->val==pNext->next->val)
p = pNext;
else if(p->val!=pNext->val)
{
if(flag==0){
head1 = new ListNode(p->val);
flag = 1;
pre = head1;
p = pNext;
}
else{
ListNode* curr = new ListNode(p->val);
pre->next = curr;
pre = curr;
p = pNext;
}

}
if(p->next==NULL)
{
ListNode* curr = new ListNode(p->val);
if(flag==1)
{
pre->next = curr;
pre = curr;
}
else
{
head1 = curr;
}
return head1;
}
}

if(p->val!=p->next->val){
pNext = p->next;
ListNode* curr = new ListNode(p->val);

if(flag==1){
pre->next = curr;
pre = curr;
curr->next = pNext;
}

else{
head1 = curr;
head1->next = pNext;
}
return head1;

}
return head1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: