我正在尝试在python中创建一个链表,并且想打印出所有内容,但将其打印为内存位置。我们已经学会了如何在课堂上解决此问题,但目前尚处于半学期,没有人问。
我当前得到的例子:
List: <__main__.LinkedList object at 0x02EA0100>
index: 0 data: 1 item: <__main__.Node object at 0x02EA00D0> pointer: <__main__.Node object at 0x02EA0148>
index: 1 data: 6 item: <__main__.Node object at 0x02EA0148> pointer: <__main__.Node object at 0x02EA0190>
index: 2 data: 3 item: <__main__.Node object at 0x02EA0190> pointer: None
这对我不是很有用。
我用来获得该母胶的方法:
def PrintList(self):
item = self.list_start
index = 0
print(f"List: {self}")
while item:
print(
f"\t index: {index}\t data: {item.data}\t item: {item}\t pointer: {item._get_pointer()}"
)
item = item._get_pointer()
index += 1
我肯定在打印行中出现了问题,我无法发现它。
我知道您不应该在此处放置大量代码,但我需要提供上下文
节点类:
class Node:
def __init__(self,data=None,pointer=None):
self.data = data
self.poiner = pointer
def PrintNode(self):
print(f"Node Data: {self.data}\t self: {self}\t pointer: {self.pointer}\n")
def _set_pointer(self,pointer):
self.pointer = pointer
def _get_pointer(self):
return self.pointer
LinkedLis类别:
class LinkedList:
def __init__(self):
self.list_start = None
def PrintList(self):
item = self.list_start
index = 0
print(f"List: {self}")
while item:
print(
f"\t index: {index}\t data: {item.data}\t item: {item}\t pointer: {item._get_pointer()}"
)
item = item._get_pointer()
index += 1
def _isleagl(self,node):
if node is None:
print(f"node' is None")
return False
elif type(node) != Node:
print(f"'node' has worng type: {type(node)}")
return False
else:
return True
def AppendNode(self,node):
if self._isleagl(node):
if self.list_start == None:
self.list_start = node
node._set_pointer(None)
else:
item = self.list_start
while item:
if item == node:
node = copy.deepcopy(node)
elif item._get_pointer() is None:
item._set_pointer(node)
node._set_pointer(None)
break
else:
item = item._get_pointer()
def DeleteNode(self,node):
if self._islegal(node):
if self.list_start == node:
self.list_start = node._get_pointer()
else:
item = self.list_start
while item:
if item._get_pointer() == node:
item._set_pointer(node._get_pointer())
break
item = item._get_pointer()
菜单系统:#我认为这不会有太大帮助
def main():
my_list = None
my_node = None
while True:
print("Node Manipulations")
print("\t 0: Create Node")
print("\t 1: Set Node Data")
print("\t 2: Print Node")
print()
print("List Manipulations")
print("\t 3: Create List")
print("\t 4: Print List")
print("\t 5: Append Node to List")
print("\t 6: Delete Node from List")
print()
print("X: EXIT Program")
choice = input("->")
if choice not in ["0","1","2","3","4","5","6","7","8","9","X","x"]:
continue
if choice == "X" or choice == "x":
break
elif choice == "0":
my_node = Node()
elif choice == "1":
if my_node is None:
print("Create Node first")
else:
my_node.data = input("Node Data? -> ")
elif choice == "2":
if my_node is None:
print("Create Node first")
else:
my_node.PrintNode()
elif choice == "3":
my_list = LinkedList()
elif choice == "4":
if my_list is None:
print("Create List first")
else:
my_list.PrintList()
print()
elif choice == "5":
if my_list is None:
print("Create List first")
else:
my_list.AppendNode(my_node)
elif choice == "6":
if my_list is None:
print("Create List first")
else:
my_list.DeleteNode(my_node)