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

删除链表中重复的结点

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==nullptr) return nullptr;
        ListNode* pre = new ListNode(0);
        pre->next = pHead;
        ListNode* cur = pHead;
        while(cur&&cur->next){
            if(cur->next->val==cur->val){
                ListNode* toDelete = cur;
                int val = cur->val;
                while(toDelete&&toDelete->val==val){
                    pre->next = toDelete->next;
                    if(toDelete==pHead) pHead = pre->next;
                    delete toDelete;
                    toDelete = pre->next;
                }
                cur = toDelete;
            }
            else{
                pre = cur;
                cur = cur->next;
            }
        }
        return pHead;
    }
};

如果重复了,本身也要删除,那就涉及会不会把第一个节点删没了的情况,所以在删除时要判断,并根据结论更新第一个节点。

删除结束有两种可能,如果是删除完了,那么就不能访问下一位了,那么我们就需要直接退出循环,或者为循环加一个判断条件。

&&只要前一半是错的就不会访问后一半了,所以我选择了直接加在while的条件中而不是让它break。

全部评论

相关推荐

learYuan:🐕看了都摇头
点赞 评论 收藏
分享
03-21 08:46
已编辑
门头沟学院 C++
一个什么都不会的学生:当你有硕士学历的时候HR会说就是比本科生强
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务