leetcode82.删除排序链表中的重复元素 II

1.题目
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
2.示例
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
3.思路
一次遍历删除所有重复的节点
4.代码
ListNode* deleteDuplicates(ListNode* head) {
if(head= =NULL||head->next= =NULL) return head;
ListNode* pre=new ListNode(INT_MIN);
//#define INT_MAX 2147483647#define INT_MIN (-INT_MAX - 1)
//INT_MIN int中最小值
ListNode* ptr=head;
ListNode* res=pre;
while(ptr!=NULL&&ptr->next!=NULL){
if(ptr->val= =ptr->next->val){//需要删除的重复节点
while(ptr!=NULL&&ptr->next!=NULL&&ptr->val==ptr->next->val)
ptr=ptr->next; //遍历找到最后一个重复节点
pre->next=ptr->next;
ptr=ptr->next;
}
while(ptr!=NULL&&ptr->next!=NULL&&ptr->val!=ptr->next->val){//不需要删除的节点
pre->next=ptr;
pre=ptr;
ptr=ptr->next;
}
}
return res->next;
}

猜你喜欢

转载自blog.csdn.net/qq_14962179/article/details/85613047