如何打印单链表中的数据以及如何得到单链表的长度

╰+攻爆jí腚メ 2023-10-05 23:48 104阅读 0赞

文章目录

    • 1 打印单链表中的数据
      • 1.1 整体思路
      • 1.2 注意点
      • 1.3 打印过程
      • 1.4 代码实现
    • 2 得到单链表的长度
      • 2.1 整体思路
      • 2.2 求长度过程
      • 2.3 代码实现

1 打印单链表中的数据

1.1 整体思路

图1:
036c8d2adbff418ab5e08ebbb54fabad.png

head指向哪个节点,就去打印哪个节点的数据。打印完成后,head通过访问下一个节点的地址来找到下一个节点,然后打印对应的数据。

图1先是会打印出12,head往后走会依次打印出23、34、45、56

图2:
452b3388ab9843eb8e0890bc934be61a.png

例如图2就是会打印出23的情况。

为了打印出所有的节点,需要写一个循环来实现对所有节点的访问

1.2 注意点

在这里插入图片描述
注意点:

循环的结束条件有一个坑,结束条件应该是 head != null,而不是 head.next != null

在这里插入图片描述
如果循环的结束条件是 head != null,当head指向null的时候,节点数据已经全部打印了。

在这里插入图片描述
如果循环的结束条件是 head.next != null,当head指向最后一个节点的时候,通过这个节点存储的下一个节点的地址找到下一个节点是空,循环此时会跳出,并且会少打印一个最后节点的数据。

当打印结束是head为空,便不再指向链表的头节点,所以要定义一个cur来代替head移动。

1.3 打印过程

无论是多少个节点都是这样打印的,所以为了便于演示这里只画三个节点的图。

e57f928c275a40749ffd12eb1fc246b7.png
此时cur指向数据12的节点,循环结束判定为真,代码会打印12。然后cur指向下一个节点。

5091290007994668bd7b929e77e5253e.png
与上一步类似,打印23后cur指向下一个节点。

d69e52b256e443ada60520112694370c.png
打印34后,cur指向下一个节点,看它是不是空的。

47e3050164e84435ba075fe41a19290c.png
此时cur指向一个null,循环跳出并且成功打印了所有结点的数据。

1.4 代码实现

  1. public void disPlay() {
  2. ListNode cur = this.head;//代替head移动
  3. while (cur != null) {
  4. System.out.print(cur.value + " ");
  5. //找到下一个结点
  6. cur = cur.next;
  7. }
  8. System.out.println();//换行
  9. }

a2b8f39081cb4f03b531d91ac25c5bab.png

2 得到单链表的长度

2.1 整体思路

2f4a75c71b604d2bb0cdd2765d4880f3.png

  • 先定义一个计数器变量来记录结点个数
  • 写一个循环来遍历单链表
  • 当cur == null的时候跳出循环
  • 最后返回计数器变量的值

2.2 求长度过程

4eb83c1cd28648d1852821a96a148b33.png
cur不为空,结点个数加1个,count++。

c451f416b27e4ad78a58b2109ee00d5c.png
cur不为空,结点个数加1个,count++,count此时为2。

cf4e1e5bb61e4db8905390370f92126c.png
cur不为空,结点个数加1个,count++,count此时为3。

35eef4bd75b845239f4f5cf57e8f982e.png
cur为空,count此时为3,返回此时count的值

2.3 代码实现

  1. public int size() {
  2. int count = 0;//计数器,统计结点的个数
  3. //为了head不会向后移动直至指向null,导致头结点消失,定义一个临时变量来代替head移动
  4. ListNode cur = this.head;
  5. while (cur != null) {
  6. //尾结点为null
  7. count++;//结点个数加1
  8. cur = cur.next;//头结点指向下一个结点
  9. }
  10. return count;//返回结点数
  11. }

发表评论

表情:
评论列表 (有 0 条评论,104人围观)

还没有评论,来说两句吧...

相关阅读