链表插入函数无法正常工作,请求技术协助排查问题
问题分析与修复
你的代码核心问题出在空闲指针(FreePointer)的更新逻辑,导致每次插入都在重复覆盖同一个节点,具体原因如下:
- 初始FreePointer为0,第一次插入时,你把新节点的
NextPointer直接设为-1,紧接着又把FreePointer赋值为这个-1。 - 后续插入时,
-1 < 10的判断成立,但LinkList[-1]是数组的最后一个元素,所以每次输入的数据都会覆盖最后一个节点的值,前面的节点除了第一个,根本没被用到。 - 另外你漏写了
Node类的定义,原代码运行时会直接报错。
修复后的完整代码
class Node: def __init__(self): self.data = "" self.NextPointer = -1 def InsertLinkList(LinkList, StartPointer, FreePointer): if FreePointer != -1: # 空闲链表为空才表示满了 data = int(input("Enter the data: ")) newNode = FreePointer # 先保存下一个空闲节点的索引,更新FreePointer FreePointer = LinkList[FreePointer].NextPointer LinkList[newNode].data = data LinkList[newNode].NextPointer = -1 if StartPointer == -1: StartPointer = newNode else: currentPointer = StartPointer while currentPointer != -1: lastNode = currentPointer currentPointer = LinkList[currentPointer].NextPointer LinkList[lastNode].NextPointer = newNode else: print("List is full") return LinkList, StartPointer, FreePointer def PrintAll(LinkList): for i in range(10): print(LinkList[i].data) # 初始化链表:构建空闲链表,每个节点的NextPointer指向下一个索引 LinkList = [Node() for i in range(10)] for i in range(9): LinkList[i].NextPointer = i + 1 LinkList[9].NextPointer = -1 # 最后一个空闲节点的NextPointer为-1 StartPointer = -1 FreePointer = 0 for i in range(10): LinkList, StartPointer, FreePointer = InsertLinkList(LinkList, StartPointer, FreePointer) PrintAll(LinkList)
关键修改点
- 补充了
Node类的完整定义,这是原代码缺失的部分。 - 初始化时构建了空闲链表:把所有节点通过
NextPointer串联起来,0→1→2→…→9→-1,这样FreePointer可以依次指向可用的空闲节点。 - 插入时先更新FreePointer:取出当前空闲节点后,把FreePointer设为该节点原来的NextPointer(即下一个空闲节点的索引),而不是设为-1。
- 修改了链表满的判断条件:当FreePointer为-1时,说明没有空闲节点了,才提示链表已满。
运行修复后的代码,输入10组数据后,所有节点都会正确显示对应的数据,不会再出现中间为空的情况。
内容的提问来源于stack exchange,提问作者user3257213
相关产品推荐
相关产品推荐

