删除链表中重复的结点

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
 
删除链表中重复的结点

 

 

 

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        if (pHead == NULL || pHead->next == NULL)
            return pHead;

        /*---------先为链表创建一个头结点---------*/

        int firstNumber = pHead->val;

        //假设我的头结点数值为-1
        int myFirst = -1;

        //万一链表的头结点也为-1,那么我就改成-2
        if (myFirst == firstNumber)
        {

            myFirst = -2;
        }
        ListNode *head = new ListNode(myFirst);
        head->next = NULL;
        head->next = pHead;

        ListNode *p = head;
        ListNode *q = head->next;

        while (q)
        {
            while (q->next && (q->next->val == q->val))
            {
                q = q->next;
            }
            if (p->next != q)
            {

                q = q->next;
                p->next = q;
            }
            else
            {
                p = q;
                q = q->next;
            }
        }

        //返回的时候,注意去掉头结点(自己创建的辅助节点)
        return head->next;

    }
};

 

 

原文链接: https://www.cnblogs.com/yuguangyuan/p/5955317.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    删除链表中重复的结点

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/398021

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月11日 上午9:52
下一篇 2023年4月11日 上午9:52

相关推荐