【待补充】关于链表的二三事
程序员文章站
2022-05-12 17:10:51
...
这篇博文仅记录有关链表的操作,供回忆与参考。
1、概述
链表在我看来是储存数据的工具,原理上讲表上每一个节点有两个属性,也可以说是格子,第一个存放数据,第二个存放下一个节点地址。最后一个节点只存放数据,第二个属性指向None。
由此,每个链表的第一个节点地址需要单独存放。
链表优点是可以无序存放,最大可能利用空间;而付出的代价就是需要一点额外空间来存放每个节点的第二个属性。但总的来说这是值得的。
2、节点类的构造
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
3、如何将一段数据保存到节点
#这里是将一个列表的数据按元素分割保存到链表。
#对如下for循环来说,只要是可迭代的数据,都可以如此保存。
Sum=[1,2,3,4,5]
tmp_node = ListNode(None)
node = ListNode(None)
for i in Sum:
if tmp_node.val is None:
tmp_node = ListNode(i)
node = tmp_node
else:
tmp_node.next = ListNode(i)
tmp_node = tmp_node.next
4、给出表头,如何访问整个链表数据
def getListNode(head: ListNode):
ls=[]#容器
while True:
ls.append(head)#将节点放入容器
if head.next==None:break
head=head.next#得到下一个节点
#保存到ls里的每个元素都是一个ListNode类,通过索引访问到的元素就是一个类实例。
print(ls,ls[0].val)