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


尾插法

在这里插入图片描述

1 思路

  • 先定义一个新的节点,命名为node。
  • 找到尾部位置
  • 将node插入到单链表的尾部位置。
  • 使node指向前一个结点,也就是原表的尾部位置。

插入前的单链表:



插入后的单链表:

2 插入过程

在这里插入图片描述

2.1 定义node节点

2.2 定义一个cur来查找单链表的尾部位置



定义一个cur来遍历单链表,如果cur.next != null,cur就往后走,直到遇到null,停止遍历,此时cur指向的位置就是单链表尾部位置。

2.3 将node插入到单链表的尾部位置

将node结点放到尾结点的后一个节点的位置。

2.4 让node结点与前一个结点连接起来


旨在修改当前cur节点的指向,将cur的地址域中存放node的地址

3 注意点

在遍历单链表的时候,循环的判断条件应该是cur.next != null,而不应该是cur != null

解释:

  • cur.next != null 的情况

    1.cur.next != null 这条语句的含义是,cur指向的结点的地址域里的地址不是null。
    2.单链表结点的地址域存放的是下一个节点的地址,cur.next 正好访问到的是下一个结点的地址。
    3.如果cur的地址域的地址是null,说明cur的下一个节点就是空,即cur为末尾结点。

  • cur != null 的情况

    当cur == null 的时候多遍历了一次,代码设计不合理。

4 为空的情况

如果单链表是空的,就不需要找尾结点是哪一个了,node就是第一个结点,直接让head指向node即可

5 代码实现

//尾插法 - 插入几点到尾部
public void addEnd(int data) {
   //1.定义一个结点和cur
   ListNode cur = this.head;//代替head向后移动
   ListNode node = new ListNode(data);//新结点node
   //现在分两个情况:1.链表不为空,即链表的尾结点在最后一个结点处. 2.链表为空,即head就是尾结点.

   //2.找到尾结点 - cur指向的地址为空就是尾结点
   //情况2:链表为空
   if(cur == null) {
      this.head = node;//直接将头结点指向node结点
   }else{ //情况1:链表不为空
      while(cur.next != null) {
         cur = cur.next;//找到下一个结点
      }
      //3.此时已经找到了尾结点,可以开始将结点串联起来了
      cur.next = node;//cur的地址域指向node结点
   }
}

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

与大师约会

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

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

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

打赏作者

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

抵扣说明:

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

余额充值