牛客——删除链表中重复的结点

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

1,申请一个新的链表保存删除重复结点后的链表
2,注意是将所有重复的结点全部删除
3,定义一个p指针指向原链表,一个指针newp指向新链表,并且将newp->next指向原链表的头结点
4,每次遇到当前结点值与后边结点值相同时,p结点要往后移动到新的不相同值的结点

class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        if (pHead==NULL or pHead->next==NULL)
            return pHead;
        ListNode* newHead = new ListNode(0);
        newHead->next = pHead;
        ListNode* newp = newHead;
        ListNode* p = pHead;
        
        while (p!=NULL and p->next!=NULL)
        {
            if (p->val == p->next->val)
            {
                int val = p->val;
                while (p!=NULL && val == p->val)
                {
                    p = p->next;
                }
                newp->next = p;
            }
            else
            {
                newp = p;
                p = p->next;
            }
        }
        return newHead->next;
    }
};
发布了315 篇原创文章 · 获赞 119 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/w144215160044/article/details/104904907