为什么在Python中调用函数和显式编写语句的工作方式不同?

2024-04-27 16:17:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要为我实现的链表执行一个insert to head操作。但是,通过函数调用(如insertToHead)执行此操作并在需要的地方显式编写语句会产生不同的结果。我想知道Python的哪一个属性导致了这种差异,但我无法理解

更具体地说,假设我有以下链接列表类:

class Node:
    value = None
    nextNode = None

    def __init__(self, value):
        self.value = value

    def insertToHead(self, value):
        newHead = Node(value)
        newHead.nextNode = self
        return newHead

对于具有单个元素(例如,2)的链表,我希望在头部插入一个节点(例如,0),以使链表0->;2.

我用以下方法创建了链表

head = Node(2)

然后我尝试通过两种方式将0插入头部:

  1. 在我需要的地方明确地写陈述
newHead = Node(0)
newHead.next = head
head = newHead

现在head是0,而不是0->;2.

  1. 调用insertToHead
head = head.insertToHead(0)

head是0->;2在本声明之后

有人知道为什么这两种方法的结果不同吗


Tags: 方法gtselfnonenodevaluedef地方
2条回答

单链表的简单实现:

class Node:
    def __init__(self, value = None, nextNode = None):
        self.value = value
        self.nextNode = nextNode

class LinkedList:
    def __init__(self):
        self.head = None  # will point to the head of the list
        self.tail = None  # will point to the tail of the list
        self.size = 0     # size of the linked list

    def insert_to_head(self, data):
        # when push front, the head of the linked list will be Node()
        self.head = Node(data, self.head)
        if self.tail == None:  # if tail is None, means it is a single element
            self.tail = self.head
        self.size += 1  # increase size by one


    def __str__(self):
        ret_str = ""
        node = self.head
        while node != None:
            ret_str += str(node.value) + " -> "
            node = node.nextNode
        return ret_str




myLinkedList = LinkedList()
myLinkedList.insert_to_head(3)
myLinkedList.insert_to_head(2)

print(myLinkedList)

你打错了newHead.next应该是newHead.nextNode

相关问题 更多 >