我需要为我实现的链表执行一个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:
- 在需要的地方明确编写语句
newHead = Node(0)
newHead.next = head
head = newHead
现在head
是0,而不是0->2。
- 调用
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)