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

删除链表中重复的结点

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;
    }
};

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

怎么绘世呢?

全部评论

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务