LeetCode:83.删除排序链表中的重复元素

解题思路:

很简单的遍历,若前后不相等,删除这个节点即可。


解题时存在问题:

  • 循环时一直在判断p->next->next存不存在,就潜意识里认为不存在怎么等?看了题解后才想起来,不存在就直接等于nullptr,而下次循环刚好p->next不存在推出循环。
  • while里的if有问题,前后相等时删了后面一个结点,但不相等时既满足题目要求时没有变化,导致结点指针p会一直停留在原地不动,无限循环,超时,讲真的,看了半天,是被自己蠢哭的一个早上[doge].

这里是被自己蠢哭的代码:

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if (!head) {
            return head;
        }
        ListNode *p = head;
        while (p->next) {
            if (p->val == p->next->val) {
                p->next = p->next->next;
            }
        }
        return head;
    }
};

这里是正解:

C++:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if (!head) {
            return head;
        }
        ListNode *p = head;
        while (p->next) {
            if (p->val == p->next->val) {
                p->next = p->next->next;
            } else {
                p = p->next;
            }
        }
        return head;
    }
};

第一次用python写数据结构:

class Solution:
    def deleteDuplicates(self, head: ListNode) -> ListNode:
        if not head:
            return head

        cur = head

        while cur.next :
            if cur.val == cur.next.val:
                cur.next=cur.next.next
            else:
                cur = cur.next

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值