删除有序链表中重复的元素

该博客探讨了如何删除有序链表中的重复元素,确保每个元素只出现一次。通过举例和错误分析,解释了处理此类问题的关键点。

题目描述

删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为1\to1\to21→1→2,返回1 \to 21→2.
给出的链表为1\to1\to 2 \to 3 \to 31→1→2→3→3,返回1\to 2 \to 31→2→3.

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* deleteDuplicates(ListNode* head) {
        // write code here
        ListNode* temp = head;
        // temp非空
        while(temp){
            // temp->next 非空的判断,必须有,不然会造成段错误 且 下一个节点值和本节点值相等
            while(temp->next && temp->next->val == temp->val){
                temp->next = temp->next->next;
            }
            temp = temp->next;
        }
        return head;
    }
};

在这里插入图片描述

原因分析

  • 第一次错在,最外层while非空判断,写错成是空才能进行
  • 第二次错在,while里没有判断temp->next非空,造成了段错误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值