为什么在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。

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

您有一个打字错误。newHead.next应该是newHead.nextNode

Singly Linked Lists:的简单实现

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)

相关内容

  • 没有找到相关文章

最新更新