剑指offer 面试题57 删除链表中重复的结点

题目:

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

总结如下:
1.再次强调一个知识点,只要想要移动指针,或者想要访问结点里的内容,一定要先判断是否为空,不然会出现段错误,越界错误.
想要node->next(可以之后判断或者之前判断)或者node->val(一定要访问前判断)的时候

一个技巧:如果报段错误,越界错误,又一时找不到哪里错误,尽管可以找点特殊的实例代进去,就很容易找到了.

2.删除一个指针的时候,一定要立刻赋值为NULL,即使下一行就赋值为其他指针值..养成好习惯.

3.关于本题,想法是要有三个指针,first,second,third
second和third是用来比较是否相等的,first是用来删除second,然后接上后面结点的
由于第一个结点也可能会被比较到相等,但是有没有第一个结点的前一个结点,就是说没有first.所以我在算法中,对于第一个结点,选择独立出来,特殊处理.具体看算法.

ListNode* deleteDuplication(ListNode *pHead) {
    if(pHead==NULL){
        return NULL;
    }
    ListNode *first=pHead;
    ListNode *second=pHead->next;
    int is_delete_head=0;
    if(second!=NULL){
        if(first->val==second->val){
            is_delete_head=1;
            while(second!=NULL && first->val==second->val){
                first->next=second->next;
                delete second;
                second=first->next;
            }
        }
    }else{
        return first;
    }
    while(second !=NULL && second->next!=NULL){
        ListNode *third=second->next;
        if(second->val==third->val){
            while(third!=NULL && second->val==third->val){
                second->next=third->next;
                delete third;
                third=NULL;
                third=second->next;
            }
            first->next=second->next;
            delete second;
            second=NULL;
            second=first->next;
        }else{
            first=second;
            second=third;
        }
    }
    ListNode *new_head=pHead;
    if(is_delete_head==1){
        new_head=new_head->next;
        delete pHead;
        pHead=NULL;
    }
    return new_head;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值