链表
1 把list转化为链表
对链表的第一个节点先进行赋值,因为其比较特殊,不方便放入for循环中.
first_node中是表头变量,它用于记录第一个节点数据域的地址,可以看做是独立于整个链表的一个特殊的量.
class ListNode:
def __init__(self, data, next_=None):
# 数据域
self.data = data
# 指针域,用于指向下一节点的指针域
self.next = next_
def from_list_to_node(l):
# new一个链表对象,实际上链表的每个节点都是一个对象
# 每当新建一个链表时,head表头变量就指向第一个节点的数据域.
first_node = ListNode(l[0])
# 把对象的引用传给previous_node,可以看成把head表头变量传过去了,
previous_node = first_node
for val in l[1:]:
# 每当新建一个节点(对象)时,就把该节点(对象)的地址传给上一个节点的指针域记录下来
previous_node.next = ListNode(val)
# 此时previous_node中指向的是上一个节点的地址,现在把它更新为下一个节点的地址,
# 因为下一个节点中数据域已经有值了,但指针域还是空,它准备指向下下一个节点(对象)
previous_node = previous_node.next
return first_node
p = from_list_to_node([1,3,5])
while p is not None:
print(p.data)
p = p.next
# 1
# 3
# 5