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
.
此题要注意的地方有以下几点:
1)考虑头结点head也要删除的情况,这时候需要判断preNode是否为空,若为空,则要使头结点指向当前节点pNode。
2)链表遍历时进行while循环,一定要有指针不等于NULL的判断条件,否则会产生Runtime Error。
代码如下:
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if(head==NULL)
return NULL;
ListNode *preNode=NULL;
ListNode *pNode=head;
while(pNode!=NULL)
{
ListNode *pNext=pNode->next;
while(pNext!=NULL&&pNode->val!=pNext->val)
{
preNode=pNode;
pNode=pNext;
pNext=pNext->next;
}
if(pNext==NULL)
return head;
else
{
while(pNext!=NULL&&pNode->val==pNext->val)
{
ListNode *pTemp=pNext;
pNext=pNext->next;
delete pTemp;
}
ListNode *pNodeTemp=pNode;
pNode=pNext;
delete pNodeTemp;
if(preNode)
{
preNode->next=pNode;
}
else
{
head=pNode;
}
}
}
return head;
}
};