美文网首页
32.删除链表中重复的节点

32.删除链表中重复的节点

作者: HamletSunS | 来源:发表于2019-08-06 11:24 被阅读0次

题目:链表是排序的,删除链表中值相同的所有节点,且不保留重复值的节点

思路:
因为链表是排序的,重复值的节点肯定是相邻的,那么设置一个指针cur用来遍历链表,指向值不同的节点处,指针pre用来定位上一个链表节点。另外链表删除操作尽量采用虚拟头结点的方法,因为第一个节点也有可能会被删除

class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        ListNode *dummy=new ListNode(0),*cur=pHead,*pre=dummy;
        dummy->next=pHead;
        
        while(cur && cur->next){
            if(cur->val==cur->next->val){
                int val=cur->val;
                while(cur && cur->val==val)
                    cur=cur->next;
                pre->next=cur;
            }
            else{
                pre=cur;
                cur=cur->next;
            }
        }
        pHead=dummy->next;
        delete dummy;
        return pHead;
    }
};

相关文章

网友评论

      本文标题:32.删除链表中重复的节点

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