刷题笔记:删除排序链表中的重复元素

本文详细介绍了如何使用Java实现链表中的重复元素删除。通过一个名为`Solution`的类,展示了两种不同的方法:一种简单的单指针迭代,另一种是更高效的双指针法。在讨论中,强调了空指针异常的处理,循环模式的选择,以及在链表操作中的逻辑。文章还提到了在实际编程中可能出现的常见问题,并提供了相应的解决方案。
摘要由CSDN通过智能技术生成
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
     if(head == null){return head;}
     else{
        ListNode cur = head;
        while(cur.next != null){
            if(cur.val == cur.next.val){
                cur.next = cur.next.next;
            }
            else{
            cur = cur.next;
            }
        }
        return head;
    }
    }
}

正确结果

经常出现的问题:

1:第一个错误:nullpointerException

空指针异常

singleLink的特点

1:空不可以指向空,如果指向,则会报错,为空指针异常

如:

 if(head == null && head.next == null){return head;}

很明显的错误

如果头节点为空,则不可以用空的头节点指向下一个节点

补充这句代码再逻辑上就是错的,编译一定会出错

如果头节点为空,那么头节点的指针指向根本没有开辟空间

会直接报错nullpointerException

图解:

 空不能指向!

2:循环模式:我自认为分两组[while(){}    while(){if(){}}]

如果只需要删除某个固定元素,则只需要删除即可,无需遍历链表

所以只需要一个

while(){}循环

如果需要遍历这个链表,则不可以值使用while循环,因为一旦有一个符合条件,while循环就自动跳出,无法遍历,所以

需要while(){

if(){}

}

while与if组合起来,while()是遍历的条件如cur.next != null

if()中是核心条件,如cur.next = cur.next.next(删除某一个节点)

3:

addtion:

双指针解法:

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null){return head;}
        else{
     ListNode pre = head;
     ListNode cur = head.next;
     while(cur != null){
         if(pre.val == cur.val){
             pre.next = cur.next;//删除
             cur = cur.next;
         }
         else{
             pre = cur;
             cur = cur.next;
         }
     }
     return head;
    }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值