刚开始编程。我对链表有这个问题,我不能正确地分配头。应该是LinkedList中的pushCar()函数,这给我带来了麻烦。如果我试着加一辆车,车头永远不会被分配。只是找不到问题。如果有人能看一下并指出问题所在,我将不胜感激。
谢谢
class Node:
def __init__(self, carData, nextNode = None, prevNode = None):
self.next = nextNode
self.prev = prevNode
self.data = carData
class LinkedList:
def __init__(self):
self.head = None
def emptyCheck(self):
return self.head == None
def pushCar(self, carData):
ref = self.head
if ref is None:
self.head = Node(carData)
elif ref.data.price < carData.price:
newNode = Node(carData)
newNode.next = ref
self.head = newNode
else:
while ref.next is not None:
if ref.next.data.price > carData.price:
ref = ref.next
else:
newNode = Node(carData)
newNode.next = ref.next
newNode.prev = ref
ref.next.prev = newNode
ref.next = newNode
return
ref.next = Node(carData)
def popCar(self):
if self.head is None: return None
data = self.head.data
self.head = self.head.next
return data
def printDB(self):
i = 1
ref = self.head
while ref is not None:
print("myCar{} \n".format(i) + str(ref.data))
ref = ref.next
i += 1
def getDB(self):
return self
def getDBHead(self):
return self.head
def arrayPush(self, array):
for i in range(0, len(array)):
cars = Car(array[i][0], array[i][1], array[i][2], array[i][3], array[i][4])
self.pushCar(cars)
def singlePush(self, car):
car = Car(car[0], car[1], car[2], car[3], car[4])
self.pushCar(car)
def __str__(self):
retStr = "LinkedList: \n"
while self.head != None:
retStr += str(self.head.data)
self.head = self.head.next
return retStr
class Car:
def __init__(self, identification, name, brand, price, active):
self.id = identification
self.name = name
self.brand = brand
self.price = price
self.active = active
def __str__(self):
return "ID: %3d" % self.id + "\tNAME:" + self.name + "\tBRAND:" + self.brand + "\tPRICE: %3d" % self.price + "\tSTATUS:" + str(self.active) + "\n"
db = LinkedList()
所以在再次查看您的代码后,我相信我看到了您遇到的问题。首先,代码运行正常。当您滚动到pushCar方法时,您将看到我添加了一个print语句。如果按原样运行此代码,您将看到head只空一次,并且
emptyCheck
返回False
。如果先print(db)
然后检查头部,就会出现问题。原因在于你的定义。在链表上迭代,直到没有,但从不重置链表。换句话说,您正在使用数据,并在最后将head设置为None。我继续更新了您的__str__
方法,以便在迭代之前存储数据的副本,然后使用该副本重置链表。另一种修补方法是不遍历自首在你的__str__
方法中,就是像你一直做的那样使用ref = self.head
。你知道吗相关问题 更多 >
编程相关推荐