算法通关村第一关---链表经典问题之移除链表元素笔记

该文章介绍了如何解决链表经典问题——移除链表中所有值等于给定值的元素。通过创建虚拟头节点和遍历链表,当找到目标值时直接更新指针实现删除,无需额外空间,提高了效率。这种方法适用于LeetCode等算法挑战平台。
摘要由CSDN通过智能技术生成

算法通关村第一关—链表经典问题之移除链表元素笔记

源码地址:GitHub-算法通关村

题目地址:LeetCode

image-20230720085958030

解题思路:

  1. 创建一个虚拟头节点 dummyHead,将它的 next 指针指向原链表的头节点 head
  2. 初始化一个指针 cur,指向虚拟头节点 dummyHead
  3. 遍历链表,循环条件是 cur.next 不为空,即 cur 不是链表的最后一个节点。
  4. 在循环中,检查 cur.next 节点的值是否等于给定的值 val。如果相等,说明需要删除该节点,直接将 cur.next 指针跳过当前节点,指向当前节点的下一个节点(即删除当前节点)。
  5. 如果 cur.next 节点的值不等于给定的值 val,则说明当前节点不需要删除,将 cur 指针向后移动一个节点,继续下一轮循环。
  6. 循环结束后,链表中所有值为 val 的节点都被删除了。
  7. 返回处理后的链表头节点,即为 dummyHead.next,作为最终结果。
/**
     * 删除特定值元素
     *
     * @param head
     * @param val
     * @return
     */
    public ListNode removeElements(ListNode head, int val) {
        ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;
        ListNode cur = dummyHead;

        while (cur.next != null) {
            if (cur.next.val == val) {
                cur.next = cur.next.next;
            } else {
                cur = cur.next;
            }
        }
        return dummyHead.next;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值