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

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
LeetCode第83题 https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/

这题非常简单,但是有细节需要注意。
首先我们的思路是让 一个结点temp 在链表中一个一个往后走,在走的过程中会有两种情况
1)temp的值等于next的值
这个时候temp.next就需要等于temp.next.next了。然后进行下一轮temp和next(这时候的next的值已经是在原链表中和temp的值隔了一个数了。)的比较了。
2)不等于
那temp.next不需要变化,只要简单让temp后移就行了。然后进行下一轮比较。

而我一开始说的细节,他就在什么时候进行这个循环这个问题上。
简单一想是当temp不等于null的时候,但是注意,我们在代码里有temp.next.next这个式子。如果单纯让temp不等于null,那当temp.next等于null时满足这个条件,但是里面会报错,因为不存在结点,那就更不存在它的next了。
那如果是temp.next!=null呢,还是会有问题,如果一开始输入的就是空null,那就同样不能进行。当然你可以在开头添加一个if语句来判断这个特殊情况,这样就能解决了。
如果我不想添加if,那还有一种方法。就是让这个条件变成“temp!=null&&temp.next!=null”这个时候,如果一开始输入的就是null,他他判断到&&时就直接跳出了,不会继续判断temp.next了。 但是同样要注意,必须temp!=null写在前面。
我就是因为这一点细节错在调试过程中疯狂报错。

代码如下:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode DeleteDuplicates(ListNode head) {
        ListNode temp=head;
        while(temp!=null&&temp.next!=null)
        {
            if(temp.val==temp.next.val)
                temp.next=temp.next.next;
            else
                temp=temp.next;
        }
return head;
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值