leetcode_32删除排序链表重复元素
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
来源:力扣(LeetCode)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
//1.如果链表为空或者只有一个头结点,不做处理直接返回
if(!head || !head->next){
return head;
}
//定义一个哑结点,指向head
ListNode* cur1 = new ListNode(-1);
cur1->next = head;
//双指针滑动,用来链接链表用
ListNode* mp = cur1;
ListNode* cur2 = head;
while(cur2 && cur2->next){
//如果cur2的值与cur2->next值不同,则cur2就是单独的一个结点,要链接
//起来
//如果每次cur2的值与cur2->next值相同,则要cur2要继续像后滑动
//直到cur2->next的值与cur2不同时,方可重新将mp指针链向cur2->next
//重复以上步骤,直到cur为空或者cur后没有结点
if(cur2->val==cur2->next->val){
while(cur2->next && cur2->next->val == cur2->val){
cur2= cur2->next;
}
mp->next = cur2->next;
cur2 = cur2->next;
}else{
mp = cur2;
cur2=cur2->next;
}
}
return cur1->next;
}
};