链表初识(二):找到链表中第一个含有某值的节点并删除该节点

由于链表的内存不是一次性分配的,因而无法保证链表的内存和数组一样是连续的。如果想查找某一个节点,则只有从头节点开始遍历,其时间效率为O(n);在数组中可根据下标来找到目标的元素,其时间效率为O(1); 如果想要找到某一节点的值或者某个数组位置存储的值,则时间效率都为O(n);

代码以及相关说明如下:

    /**
     * 删除链表中的某一节点
     *
     * @param headNode  头节点
     * @param value    目标值
     * @return   链表的头节点
     */
    private ListNode deleteNode(ListNode headNode, int value){
        if (headNode == null){
            // 如果链表的头结点不存在, 则返回头结点(null)
            return headNode;
        }
        // 将头结点赋给headNode1, 一半在后面的操作中能够找到初始的头结点
        ListNode headNode1 = headNode;
        if (headNode.getValue() == value){
            // 如果头结点的值就是目标值,则替换头结点(不在返回headNode1, 返回调整后的头结点headNode)
            headNode = headNode.getListNode();
            return  headNode;
        }
        while (headNode.getListNode() != null && headNode.getListNode().getValue() != value){
            // 如果下一个节点不为空,并且下一个节点的值不是目标值;则继续遍历链表的下一个节点
            headNode = headNode.getListNode();
        }
        if (headNode.getListNode() != null){
            // 如果说下一个节点不为空,说明下一个节点的值是目标节点,则删除该节点
            headNode.setListNode(headNode.getListNode().getListNode());
            // 最后返回初始的头结点
            return headNode1;
        } else {
            // 如果都没有找到目标值,返回初始的头结点
            return headNode1;
        }
    }

删除链表,关键在于要明确节点的意义和指针的意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Heynchy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值