Python中用for循环一次性给单向链表添加多个节点

目录

一、链表的Python实现

二、一个一个地添加节点,生成链表

三、用for循环一次性添加多个节点,生成链表


一、链表的Python实现

class ListNode:
    '''这是链表类'''
    def __init__(self,x):
        # val属性是当前节点的值
        self.val = x
        # next属性是下一个节点,默认是None
        self.next = None

二、一个一个地添加节点,生成链表

如果现在我想创建一个这样的链表:1->2->3->4->5->None,那么我可以用最简单的办法,一个节点一个节点地手动添加

# 创建头节点
linked = ListNode(1)
# 让头结点指向下一个节点
linked.next = ListNode(2)
# 继续往后面指,下同
linked.next.next = ListNode(3)
linked.next.next.next = ListNode(4)
linked.next.next.next.next = ListNode(5)

# 打印
print(linked.val,end='')
print('->',end='')
print(linked.next.val,end='')
print('->',end='')
print(linked.next.next.val,end='')
print('->',end='')
print(linked.next.next.next.val,end='')
print('->',end='')
print(linked.next.next.next.next.val,end='')
print('->',end='')
print(linked.next.next.next.next.next)

从上面的代码可以看到,做了很多重复的工作,代码冗余。我们可以考虑用循环完成这项工作。

三、用for循环一次性添加多个节点,生成链表

# 创建头节点
head = ListNode(1)
# 创建一个不断往前移动的节点,它的起点是头节点
node = head
for x in range(2,6):
    # 把node的下一个节点设为ListNode(x)
    node.next = ListNode(x)
    # 让node指向node的下一个节点,这样就能不停往前走
    node = node.next

# 这次把打印的代码也优化一下,也用循环实现
node = head
while True:
    print(node.val,end='')
    print('->',end='')
    node = node.next
    if node is None:
        print(node)
        break

有两个要点在下面说明:

Q1:for循环里发生了什么?

A1: 第一次循环:node变成了头节点的下一个节点

      第二次循环:node变成了头节点的下一个节点的下一个节点

      第三次循环:node变成了头节点的下一个节点的下一个节点的下一个节点

      ……

      上面的过程是不是似曾相识?就是我们在“一个一个地添加节点”中的linked.next = ListNode(2),linked.next.next=ListNode(3),linked.next.next.next=ListNode(4)……

 

Q2: 为什么要创建指向同一个节点ListNode(1)的两个变量head和node?

A2:单向链表的头节点是非常重要的,我们是顺着头结点找到后面所有节点,从而了解链表的全貌的。如果只用一个变量指向头节点,那么随着这个变量一步步往后走,最终我们只得到了链表的最后一个节点,前面的节点都被扔掉了(没有变量指向它们了,无法再找到它们)

而我们用head和node共同指向头节点,node往后走,创造出后面的节点,但是head始终指向头节点,这样最终我们就可以顺着head,找到后面一串的节点。

 

 

如果这篇博文帮到了你,就请给我点个吧(#^.^#)

有疑问也欢迎留言~博主可nice啦,在线秒回ヾ(◍°∇°◍)ノ゙

 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值