为什么要在for循环中取一个新变量“head”?

问题描述 投票:0回答:1
class Node:
    def __init__(self, data):
        self.data = data
        self.ref = None

def Print_LL(linkedlist):
    if linkedlist is None:
        print("LinkedList is empty!!")
    else:
        while linkedlist is not None:
            print(linkedlist.data)
            linkedlist = linkedlist.ref

def arr_to_LL(arr, n):
    linkedlist = None

    for i in range(0,n):
        new_node = Node(arr[i])

        if linkedlist is None:
            linkedlist = new_node
        else:
            head = linkedlist
            while head.ref is not None:
                head = head.ref
            head.ref = new_node
    return linkedlist

为什么要取“head”变量?为什么我们不能继续使用链表

python linked-list singly-linked-list
1个回答
0
投票

linkedlist
是对列表头部的引用。
head
,尽管名称如此,只是对列表的end 的引用,或者更具体地说,是对您将附加新节点的节点的引用。
arr_to_LL
的更好定义可能是

def arr_to_LL(arr):
    head = None

    for v in arr:
        new_node = Node(v)

        if head is None:
            head = new_node
        else:
            curr.ref = new_node

        curr = new_node
           
    return head

这个

for
循环有两个不变量:

  1. head
    总是指(可能为空)链表的前面。
  2. curr
    (一旦定义)总是指链表的end

当你遍历数组时,你只需将一个新节点附加到末尾,然后更新末尾。

如果你使用由一个虚拟节点表示的空链表的通用约定,它会变得更加简单。

def arr_to_LL(arr):
    # We'll store the length in the dummy node, because why not?
    head = curr = Node(0)

    for v in arr:
        curr.ref = Node(v)
        curr = new_node
        head.data += 1
           
    return head
© www.soinside.com 2019 - 2024. All rights reserved.