关于链表中重复元素的删除

该博客介绍了如何解决LeetCode第83题,即删除排序链表中的重复元素。通过定义一个cur指针来遍历链表,当遇到相同值的相邻节点时,cur.next直接指向下一个非重复节点,从而实现删除重复元素。代码中展示了详细的步骤和解释。
摘要由CSDN通过智能技术生成

力扣第83题:删除排序链表中的的重复元素

1.给定一个已排序的链表的头head,删除所有的重复元素,使得每个元素只出现一次。

示例:

2.首先我们需要定义好ListNode链表类:

 public class ListNode {
      int val;
      ListNode next;
      ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }

3.思路分析

首先我们需要定义一个cur链表指针,用于对链表的遍历,为什么需要定义一个cur,而不是直接用链表的头结点head进行操作呢?在链表的操作中,链表头是一定要固定的,而指针cur是不断在移动,就相当于你站着不动,然后让另外一个人来对你进行搜身检查,因此如果头结点head移动了,那么链表就会找不到链表的起始位置。详细解释自己补数据结构,这是数据结构的基础知识哟

4.代码部分

 public ListNode deleteDuplicates(ListNode head) {
//如果头结点为空,那么我们直接返回就可以了,根本不需要遍历
        if (head == null) {
            return head;
        }
//定义cur指针,来对链表进行遍历
        ListNode cur = head;
//注意,在对结点进行遍历前,一定要对结点进行判断是否为空,如果到了链表末尾,那么cur.next就是为null的,如果继续操作的话程序就会出现错误


        while (cur.next != null) {
             //如果当前结点的值等于下一个结点的值
            if (cur.val == cur.next.val) {

          //将当前结点指向下下一个结点(cur.next.next),也就是跳过了cur.next结点!!
                cur.next = cur.next.next;
            } else {
 //如果不同,那么当前结点就指向下一个结点即可
                cur = cur.next;
            }
        }
            //完成上面遍历后直接返回头结点就可以啦
        return head;
    }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值