美文网首页
算法-18.删除链表的节点

算法-18.删除链表的节点

作者: zzq_nene | 来源:发表于2020-08-15 19:03 被阅读0次

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。

    public class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
        }
    }

    /**
     * 删除链表的节点
     *
     * @param head
     * @param val
     * @return
     */
    public ListNode deleteNode(ListNode head, int val) {
        // 如果head为null,则返回null
        if (head == null) {
            return null;
        }
        // 如果head.next为null,说明就一个
        if (head.next == null) {
            if (head.val == val) {
                return null;
            }
            return head;
        }
        // 有多个节点,删除头节点
        if (head.val == val) {
            return head.next;
        }
        ListNode cur = head;
        ListNode next = null;
        while (cur.next != null) {
            // 获取next
            next = cur.next;
            // 从第二个节点开始判断,value是否相等
            // 如果不相等,则把当前节点位置向后推一个
            // 如果相等,则删除这个next节点,即将当前节点的next指向next.next
            if (next.val == val) {
                next = next.next;
                cur.next = next;
            } else {
                cur = next;
            }
        }
        return head;
    }

如果是给定一个链表头节点,再给一个需要删除的节点,而不是给val
比如:

public ListNode deleteNode(ListNode head, ListNode tobeDelete) {
        if (head == null || tobeDelete == null)
            return null;
        if (tobeDelete.next != null) {
            // 要删除的节点不是尾节点
            // 这样做的目的是因为tobeDelete节点中保存了其val和next信息
            ListNode next = tobeDelete.next;
            tobeDelete.val = next.val;
            tobeDelete.next = next.next;
        } else {
            if (head == tobeDelete)
                // 只有一个节点
                head = null;
            else {
                ListNode cur = head;
                while (cur.next != tobeDelete)
                    cur = cur.next;
                cur.next = null;
            }
        }
        return head;
    }

相关文章

  • 算法-18.删除链表的节点

    给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。 如果是给定一个链表...

  • 刷题6 剑指 Offer — 链表

    剑指 Offer 18. 删除链表的节点 https://leetcode-cn.com/leetbook/rea...

  • LeetCode 链表[L1]

    面试题18. 删除链表的节点 写法一:因为有可能会删掉链表的head节点,为了避免讨论这种情况,引入一个头节点(-...

  • LeetCode基础算法-链表

    # LeetCode基础算法-链表 LeetCode 链表 1. 删除链表中的节点 请编写一个函数,使其可以删除某...

  • Day 2 删除无序链表中的重复节点

    算法 Day2 删除无序链表中的重复节点,保留一个 给定一个无序单向链表的头节点,删除内部的重复节点,使其内部节点...

  • 剑指offer之(链表和栈)

    题目列表链表面试题06. 从尾到头打印链表面试题18. 删除链表的节点面试题22. 链表中倒数第k个节点面试题24...

  • 牛客网高频算法题系列-BM9-删除链表的倒数第n个节点

    牛客网高频算法题系列-BM9-删除链表的倒数第n个节点 题目描述 给定一个链表,删除链表的倒数第 n 个节点并返回...

  • 链表类算法题汇总

    算法题目中常考察的链表操作无非以下几种: 链表反转 链表合并 寻找链表中点 寻找链表倒数第 K 个节点 删除链表节...

  • 单向链表的基本操作

    参考 一步一步写算法(之单向链表) 1. 单向链表的数据结构 2. 创建链表 3. 增加节点 4. 删除节点

  • 数据结构与算法之链表面试题(四)

    目录 删除链表中的节点反转一个链表递归实现迭代(非递归)实现 一 删除链表中的节点 237. 删除链表中的节点 说...

网友评论

      本文标题:算法-18.删除链表的节点

      本文链接:https://www.haomeiwen.com/subject/hcabrktx.html