【数据结构】链表的插入删除

这篇博客详细讲解了链表的插入和删除操作,包括不带傀儡结点和带傀儡结点的情况。在插入部分,讨论了如何在链表中间、头部插入节点,并提供了关键代码。在删除部分,介绍了按值、位置和下标删除中间结点,以及删除头结点的方法。博客强调了在进行链表操作时确保引用不为空的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表的时候,必须保证引用不为空引用。像cur.next!=null,这种代码得保证cur不为空。

1 链表插入

1.1 不带傀儡结点的插入

1.1.1 插入到链表的中间位置

注:(只变化next存放的地址 需要找到待插入节点前一个位置)

例如:把100这个节点插入到1和2之间
在这里插入图片描述

在这里插入图片描述

把100这个节点插入到1和2之间,此时需要先知道1(待插入位置的前一个节点)这个节点的引用

  • 定义一个prev引用,里面存放1的地址
    Node pre=new Node(1);
  • 定义一个cur引用,里面存放新节点的地址
    Node cur=new Node(100);
    关键代码:
1.先修改cur.的指向,让cur指向2(即cur.next存放2的地址)
cur.next=prev.next;
2.pre 指向cur(pre的next存放cur的地址)
prev.next=cur;
1.1.2 头节点插入(插入到链表的头结点,使之为头结点)

注:头结点插入会影响head指向,之前的插入中间位置,需要找到待插入位置的前一个位置。但是头插前面没有位置

在这里插入图片描述
关键代码:
1.先让cur的next指向head
cur.next=head;
2.再让head指向新节点
head=cur;

1.3 尾插和中间插的(插入)关键代码相同(要找到末尾结点)

思路:先找到末尾结点,然后进行插入

    public static void  insertTail(Node head,int val){
   
        if (head==null){
   
            return ;
        }
        //先找到最后一个结点的位置
        Node prev=head;
        while(prev.next!=null){
   
            prev=prev.next;
        }
        //此时prev指的是最后一个元素
        
        //定义一个带插入的节点
        Node cur=new Node(10);
        cur.next=prev.next;
        prev.next=cur;
        
    }

1.2 带傀儡结点的插入

注:不带傀儡结点的链表,插入中间位置和插入头部是两种不同的代码。
带傀儡结点插入把两个操作统一。
此时的头插也相当于中间插.

1.2.1 中间插(要找到待插入结点前一个结点的位置)

在这里插入图片描述

public class Main {
   
    public static void main(String[] args) {
   
       Node head= createListWithDummy();

       //找到待插入前一个位置
        Node prev=head.next;
        //创建带插入的节点
        Node cur=new Node(10);
        //中间插的步骤
        //往中间结点插入,1和2之间
        cur.next=prev.next;
        prev.next=cur;

    }

    //带傀儡结点链表
    //傀儡借点中的值不使用
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值