美文网首页
删除排序链表中的重复元素 II

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

作者: 王王王王王景 | 来源:发表于2019-08-09 08:54 被阅读0次

    给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

    示例 1:

    输入: 1->2->3->3->4->4->5
    输出: 1->2->5
    

    示例 2:

    输入: 1->1->1->2->3
    输出: 2->3
    

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
    代码

    /**
     * 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) {
            if(head == nullptr) return head;
            // 处理存在重复头部问题很麻烦,我们可以自己建立一个新的头部
            ListNode* p1 = new ListNode(0);
            p1->next = head;
            head = p1;
            ListNode *p2 = head->next, *p3 = p1;
            while(p2) {
                p3 = p2;
                while(p3 && p3->val == p2->val)
                    p3 = p3->next;
                if(p3 == p2->next) {
                    p1 = p2;
                    p2 = p3;
                } else {
                    p1->next = p3;
                    p2 = p3;
                }
            }
            return head->next;
        }
    };
    

    相关文章

      网友评论

          本文标题:删除排序链表中的重复元素 II

          本文链接:https://www.haomeiwen.com/subject/zfxcjctx.html