剑指offer.删除链表中重复的节点

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留。

样例1
输入:1->2->3->3->4->4->5

输出:1->2->5
样例2
输入:1->1->1->2->3

输出:2->3

想法:用两个指针,一个指向当前节点,另一个移动,移动到另一个链表节点值不等于当前链表节点值得节点。然后删除中间得元素,达到去重得目的

class Solution{
public:
    ListNode* deleteDuplication(ListNode* head){
        ListNode* dump = new ListNode(-1);
        dump->next = head;
        auto p = dump
        while(p->next){
            auto q = p->next;
            while(q && p->next->val == q->val){
                q = q->next;
            }
            if(p->next->next == q){
                p = p->next;
            }else{
                p->next = q;
            }

        }
        return dump->next;
    }



};

猜你喜欢

转载自www.cnblogs.com/tingweichen/p/10631666.html