题解 | #删除链表中重复的结点#

删除链表中重复的结点

https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef


/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead) {
        if(!pHead) return nullptr;
        ListNode *pre = new ListNode(0);
        pre->next = pHead;
        ListNode *last = nullptr;
        ListNode *p = nullptr;
        int cur = -1;
        last = pre;
        p = pHead;
        cur = pHead->val;
	  //时间复杂度O(n),空间复杂度O(1),因为是顺序的所以没必要额外记录
        while(p->next)
        {
            if(p->next->val==cur)
            {
                while(p->next && p->next->val==cur)
                    p=p->next;
                p=p->next;
                last->next=p;
            }else {
                last = p;
                p=p->next;
            }
            if(p)
                cur = p->val;
            else
             break;
        }
        return pre->next;
    }
};

磨砂的指名者 文章被收录于专栏

怎么绘世呢?

全部评论

相关推荐

06-14 19:09
门头沟学院 Java
darius_:给制造业搞的,什么物料管理生产管理,设备管理点检,最最关键的就是一堆报表看板。个人觉得没啥技术含量都是些基本的crud,但是业务很繁琐那种
点赞 评论 收藏
分享
面向对象的火龙果很爱...:去吃一顿炸鸡就走
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务