83.删除排序链表中的重复元素 & 82.删除排序链表中的重复元素II
83.删除排序链表中的重复元素
思路:
设置一个pre,首先指向dummy,cur指向head
1.pre和cur相等时,pre->next=cur->next;
cur=pre->next;
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* dummy=new ListNode(-111,head);
ListNode* pre=dummy;
ListNode* cur=head;
while(cur!=nullptr){
if(pre->val==cur->val){ //删除cur,pre不变
pre->next=cur->next;
cur=pre->next;
}else{ //一起右移
pre=pre->next;
cur=cur->next;
}
}
return head;
}
};
82.删除排序链表中的重复元素II
思路:
用pre指针的没写出来,只用一个cur指针
比较cur后面两个结点cur->next 和 cur->next->next
如果相同,先记录cur->next的值,然后while循环删除值相等的结点(处理连续好几个结点相等的情况)
删除方式:时cur的next指针指向下下个(即next的next),此时删除掉的是cur->next
如果不同,移动cur
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* dummy=new ListNode(-111,head);
ListNode* pre=dummy;
ListNode* cur=head;
while(cur->next!=nullptr&&cur->next->next!=nullptr){
//相等需要删除
if(cur->next->val==cur->next->next->val){
int tmp=cur->next->val; //记录相等的value
//循环删除相等结点
while(cur->next&&cur->next->val==tmp){
cur->next=cur->next->next;
}
}else{
cur=cur->next;
}
}
return dummy->next;
}
};