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

2019-08-09  本文已影响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;
    }
};
上一篇下一篇

猜你喜欢

热点阅读