如何在python中创建链表

如何在python中创建链表,python,python-3.x,linked-list,singly-linked-list,Python,Python 3.x,Linked List,Singly Linked List,我试图用python解决一个链表编码难题。我只给了下面的类来创建一个链表 # Definition for singly-linked list. class ListNode(object): def __init__(self, x): self.val = x self.next = None 我可以创建一个类似这样的链表 x = ListNode(1) x.next = ListNode(4) x.next.next = ListNode(5)

我试图用python解决一个链表编码难题。我只给了下面的类来创建一个链表

# Definition for singly-linked list.
class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None
我可以创建一个类似这样的链表

x = ListNode(1)
x.next = ListNode(4)
x.next.next = ListNode(5)

但是,如何迭代创建(在for循环中)

您可以执行以下操作:

arr = [1,4,5]
for i in arr:
    x = ListNode(i)
    x = x.next
但是现在x将变成
None
。由于没有其他需要跟踪的内容,因此无法打印元素

您可以通过在循环之间打印x.val的值来验证这一点:

arr = [1,4,5]
for i in arr:
    x = ListNode(i)
    print(x.val)
    x = x.next
输出:

1
4
5

您可以向构造函数添加
下一个
参数:

class ListNode(object):
    def __init__(self, x, next=None):
        self.x = x
        self.next = next

head = None
for x in [5, 1, 7, 96]:
    head = ListNode(x, next=head)

# Linked list looks like:
# (96) -> ( 7) -> ( 1) -> ( 5) -> None
你需要两个“指针”来记住列表的开头和结尾。磁头初始化一次。您最终将使用它访问整个列表。每次添加另一个节点时,尾部都会发生变化:

data = [5, 1, 7, 96]
tail = head = ListNode(data[0])
for x in data[1:]:
    tail.next = ListNode(x) # Create and add another node
    tail = tail.next # Move the tail pointer

没有别的班了