LeetCode:83和82.删除排序链表中的重复元素I,II

这两题算是链表的基础题,就遍历删除没啥特点,

83甚至不需要考虑第一个结点的特殊情况,属实是名副其实的easy了

LeetCode:21.合并两个有序链表之第一次的特殊情况-CSDN博客

83. 删除排序链表中的重复元素 - 力扣(LeetCode)

82. 删除排序链表中的重复元素 II - 力扣(LeetCode) 

目录

题目:

​编辑 思路:

代码+注释:

83:

82:

 每日表情包:


题目:

 思路:

遍历,就看你做的熟不熟悉,快不快,由于是遍历,也没开辟新的空间,所以是时O(n),空O(1)

代码+注释:

83:
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* deleteDuplicates(struct ListNode* head) {
    struct ListNode* pfast = head, *pslow = head;
    //本来想写个双指针,不知道起什么名字,就起了个快慢,不过这里的实现更像是pslow 为pcur之意,pfast为ptmp之意
    //pcur是当前指针之意,ptmp为临时指针之意
    while(pslow && pslow->next){
        pfast = pslow->next;
        if(pfast->val == pslow->val){
            pslow->next = pfast->next;
            free(pfast);
        }
        else{
            pslow = pslow->next;
        }
    }
    return head;
}
82:
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* deleteDuplicates(struct ListNode* head) {
    //打眼一看就知道影响到了第一个结点,
    //虽然内心一直想尝试一下造个二级指针,存head来玩,不过还是以后玩,现阶段先熟悉基本玩法
    //写个正规一点的malloc吧
    struct ListNode* ptmp = (struct ListNode*)malloc(sizeof(struct ListNode));
    assert(ptmp);
    struct ListNode* phead = ptmp;
    ptmp = NULL;
    phead->next = head;
    //现有phead 和ptmp
    struct ListNode* pcur = phead;
    //这次相比于删除排序链表中的重复元素I就明现舒服多了
    //思路就是遍历删除,就是考虑要造几个变量,
    while(pcur && pcur->next && pcur->next->next){
        phead->val = pcur->next->val;
        if(pcur->next->val == pcur->next->next->val){
            while(pcur && pcur->next){
                ptmp = pcur->next;
                if(phead->val == pcur->next->val){
                    pcur->next = pcur->next->next;
                    free(ptmp);
                }
                else{
                    break;
                }
            }
        }
        else{
            pcur = pcur->next;

        }
    }
    ptmp = phead->next;
    free(phead);
    return ptmp;
}

 每日表情包:

点赞点赞……点赞…求求啦!一个免费的赞可以让我出产更多的……水……文 。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值