java 如何实现单链表中的头插法


头插法

在这里插入图片描述

1 思路

  • 先定义一个新的节点,命名为node。
  • 将node插入到原来单链表头节点的前面。
  • 使node指向下一个结点,也就是原表的head。
  • 再将node改成头节点,head指向node。

原来的单链表:


插入后的单链表:

2 插入过程

在这里插入图片描述

2.1 定义node节点

2.2 将node插入到原来head前面的位置


2.3 将node节点与下一个结点链接起来



将node节点的地址域存上下一个节点的地址
具体的做法是:node.next = head,将node的地址域指向原来的头节点。

2.4 更改head的指向


让head重新指向单链表的node。
具体做法是:head = node

3 注意点

在头插的时候,要先与后面的结点绑定,再更改head的指向。就是先让要插入的结点与下一个结点链接之后再让head指向新的头结点位置。

先更改head指向再绑定后面结点的情况:

  1. 执行head = node前:

  2. 执行head = node后:

  3. 当执行过后,head此时与node指向了同一个节点,而在执行node.next = head的时候相当于让它自己指向自己。


    当前node结点的地址是0x10,因为node和head指向同一个位置,head的地址也是0x10,所以node的地址域存的是0x10,会因为无法连接到下一个结点而带来错误。

4 为空的情况

如果要在一个空的单链表中的插入一个node结点,步骤和上面不为空的情况相同,先绑定后面,再更改head的指向。

只不过在实现头插法的时候,不需要考虑单链表是不是空的,因为它总是在头部插入。

5 代码实现

//头插法 - 插入结点到头部
//头插法可以不考虑表是不是null - 即使表是空的node的地址域也是null,也能找到下一个结点
public void addStart(int data) {
   //1.定义一个要插入的结点node
   ListNode node = new ListNode(data);

   //2.让node的地址域指向原表的头结点
   node.next = this.head;

   //3.再让原表的头结点直向新表的头结点(node)
   head = node;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

与大师约会

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

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

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

打赏作者

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

抵扣说明:

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

余额充值