作为我的 A-Level 课程的一部分,我必须编写一个程序来创建一个能够添加和删除节点的链表。
不幸的是,我的考试委员会规定这必须以特定的非正统方式完成。他们希望节点是具有存储在标准列表中的两个属性(数据和指针)的对象。
以这种方式完成非常重要,因为考试委员会不接受任何其他方法:(
这是我必须使用的节点的构造方法
class ListNode:
def __init__(self) :
self.data = int()
self.pointer = -1
我花了很长时间尝试各种事情来让它正常工作,但我似乎无法让它保持指针正确。
有人可以帮我解决一个工作问题,任何帮助都非常感谢。
编辑:正如我建议的那样,我发布了我目前最好的尝试。
到目前为止,我已经完成了初始化并添加了(我认为),但我需要删除方面的帮助。我还认为我可能需要调整我的添加代码才能删除工作。虽然我完全不知道如何在被删除后保持指针指向正确的节点。
初始化:
def initialiselist():
List = [Node() for i in range(10)]
startpointer = nullpointer
freelistptr = 0
for index in range(9):
List[index].pointer = index + 1
List[9].pointer = nullpointer
for i in List:
print(i.data, i.pointer)
return List, startpointer, freelistptr
添加节点:
def insertnode(List, startpointer, freelistptr, newdata):
if startpointer == -1: #If list is empty
List[freelistptr].data = newdata
startpointer = freelistptr
freelistptr = List[startpointer].pointer
List[startpointer].pointer = -1
return(List,startpointer,freelistptr)
for i in List:
if i.data == newdata:
print("You cannot have duplicate data")
return(List,startpointer,freelistptr)
if freelistptr == -1:
print("The list is full")
return(List,startpointer,freelistptr)
elif freelistptr != -1: #If Lis is not empty
List[freelistptr].data = newdata
if List[startpointer].data > newdata: #If the new data is less than the startpointer
temp = List[freelistptr].pointer
List[freelistptr].pointer = startpointer
startpointer = freelistptr
freelistptr = temp
return(List,startpointer,freelistptr)
else: #If the new data is greater than the startpointer
if List[startpointer].pointer == -1:
List[startpointer].pointer = freelistptr
temp = freelistptr
freelistptr = List[freelistptr].pointer
List[temp].pointer = -1
return(List,startpointer,freelistptr)
nextnodeptr = List[startpointer].pointer
previousnodeptr = startpointer
newnodeptr = freelistptr
temp2 = List[freelistptr].pointer
while True:
if List[nextnodeptr].pointer == -1:
if List[nextnodeptr].data > newdata:
List[newnodeptr].pointer = nextnodeptr
List[previousnodeptr].pointer = newnodeptr
break
elif List[nextnodeptr].data < newdata:
List[nextnodeptr].pointer = newnodeptr
temp2 = List[freelistptr].pointer
List[newnodeptr].pointer = -1
break
if List[nextnodeptr].data > newdata:
temp2 = List[freelistptr].pointer
List[newnodeptr].pointer = nextnodeptr
List[previousnodeptr].pointer = newnodeptr
break
else:
previousnodeptr = nextnodeptr
nextnodeptr = List[nextnodeptr].pointer
freelistptr = temp2
return (List,startpointer,freelistptr)
我知道这只是一堵完整的文字墙,但我不习惯在这里发帖,所以很抱歉。
我的问题是如何删除节点?