为什么在 Python 中调用函数和编写语句的工作方式明显不同?
Why does calling a function and writing statements explicitly work differently in Python?
我需要为我实现的链表插入头部操作。但是,通过函数调用(如 insertToHead)执行此操作并在我需要的地方显式编写语句会产生不同的结果。我想知道 Python 中的哪个 属性 导致了这种差异,但我无法弄清楚。
更具体地说,假设我有以下 class 链表:
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的方式:
- 在我需要的地方显式地编写语句
newHead = Node(0)
newHead.next = head
head = newHead
现在 head
是 0,而不是 0 -> 2。
- 呼叫
insertToHead
head = head.insertToHead(0)
head
在这条语句之后是 0 -> 2。
有谁知道为什么这两种方法会产生不同的结果?
你打错了。 newHead.next
应该是 newHead.nextNode
.
单链表的简单实现:
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)
我需要为我实现的链表插入头部操作。但是,通过函数调用(如 insertToHead)执行此操作并在我需要的地方显式编写语句会产生不同的结果。我想知道 Python 中的哪个 属性 导致了这种差异,但我无法弄清楚。
更具体地说,假设我有以下 class 链表:
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的方式:
- 在我需要的地方显式地编写语句
newHead = Node(0)
newHead.next = head
head = newHead
现在 head
是 0,而不是 0 -> 2。
- 呼叫
insertToHead
head = head.insertToHead(0)
head
在这条语句之后是 0 -> 2。
有谁知道为什么这两种方法会产生不同的结果?
你打错了。 newHead.next
应该是 newHead.nextNode
.
单链表的简单实现:
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)