【发布时间】:2013-11-20 04:24:04
【问题描述】:
我已经看到一些算法旨在在此处的链接列表末尾附加一个元素并浏览其他网站,然后我编写了一个小程序,我相信它应该在列表末尾附加一个给定元素,但它似乎不起作用。 我的问题是,为什么它不起作用?
我定义的指针和节点如下:
Pointer = ^Node;
Node = record
about : element;
next : Pointer;
end;
下面的过程接收一个链表 L 和一个应该附加到 L 末尾的 q 元素
首先我定义了之后要插入的记录
var INS : Poniter;
........
INS.about := q;
流程如下:
{temp := L} {I'll use this for my attempt below }
if L<>NIL then
begin
while L^.next<>NIL do
begin
L:= L^.next;
end;
L^.next := INS;
INS^.next := NIL;
{L:=temp;} {I'll explain this in my attempt below}
end
else
begin
L:= INS;
end;
我还有一个打印链表所有元素的小程序
procedure displayElements(L : pointer);
begin
while L <> nil do
begin
writeln(L^.about);
L := L^.next;
end
end;
问题:在我运行 de 程序后,它只显示列表的最后两个条目。
关于问题的猜想:我相信它只显示最后两个,因为当我运行过程 displayElements 时,指针 L 已经是 NIL 之前的一个元素 - 因为我使用了第二种算法 -。
尝试解决方案:好的,我认为我需要将 L 放回第一位,这样当我使用 displayElements 时,它会获取列表中的所有元素。但是我怎么能这样做呢?,我尝试了我在上面将 L 保存在 temp 中的评论,但它没有用。
有什么想法吗?谢谢。
【问题讨论】:
-
插入过程的标题是什么?您是使用插入局部变量还是全局变量?顺便说一句,'INS^.next := NIL' 行应该是你初始化 INS 的地方,你没有显示。您似乎在重新定义“指针”类型也无济于事。
-
标题:过程插入(q:整数;L:指针)。我同意我应该输入“INS^.next := NIL”,但是我在哪里重新定义了“指针”类型?。
-
在代码的开头,你写了“我定义了指针和节点如下:指针 = ^node”。
标签: linked-list pascal freepascal