题目要求:
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
.
ListNode *deleteDuplicates(ListNode *head) {
if(head == NULL || head->next == NULL)
return head;
ListNode* pre = head, *cur = head->next;
while(cur != NULL)
{
if(pre->val == cur->val)
{
pre->next = cur->next;
delete cur;
cur = pre->next;
}
else
{
pre = cur;
cur = cur->next;
}
}
return head;
}
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
.
ListNode *deleteDuplicates(ListNode *head) {
if(head == NULL || head->next == NULL)
return head;
ListNode* virtual_head = new ListNode(0);
virtual_head->next = head;
ListNode* del_begin = virtual_head;//添加一个虚拟头结点方便删除头结点
while(del_begin != NULL)
{
ListNode* del_end = del_begin->next;
while(del_end != NULL && del_end->next != NULL &&
del_end->next->val == del_end->val)//找到要删除重复区间的最后一个节点
{
del_end = del_end->next;
}
if(del_begin->next != del_end && del_end != NULL)//如果有重复区间存在,将del_begin节点的下一位指向del_end的下一个节点,并逐个删除区间中的节点
{
ListNode* node = del_begin->next;
del_begin->next = del_end->next;
while(node != del_end)
{
ListNode* pnext = node->next;
delete node;
node = pnext;
}
delete del_end;
}
else
del_begin = del_begin->next;
}
return virtual_head->next;
}