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;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务