题目:链表是排序的,删除链表中值相同的所有节点,且不保留重复值的节点
思路:
因为链表是排序的,重复值的节点肯定是相邻的,那么设置一个指针cur用来遍历链表,指向值不同的节点处,指针pre用来定位上一个链表节点。另外链表删除操作尽量采用虚拟头结点的方法,因为第一个节点也有可能会被删除
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
ListNode *dummy=new ListNode(0),*cur=pHead,*pre=dummy;
dummy->next=pHead;
while(cur && cur->next){
if(cur->val==cur->next->val){
int val=cur->val;
while(cur && cur->val==val)
cur=cur->next;
pre->next=cur;
}
else{
pre=cur;
cur=cur->next;
}
}
pHead=dummy->next;
delete dummy;
return pHead;
}
};
网友评论