主题:单向链表遇到的问题~希望大家帮助
今天在学单向链表.模仿着网络教程,做了一个输入输出的小程序...但遇到一个问题,请高人赐教
介绍:第一个procedure输入一系列整数并存入链表.第二个procedure输出链表中的所有整数,5个一行.
问题是运行中发现,所有的存入整数都能正常显示,但是每次都会自动加上4210 -15106 -30710 0这4个整数,怎么检查都不知道程序哪里不正确.当用户输入9999时,尾结应该是nil才对,而当结点为nil时,第二个procedure应该不会再继续输出了呀..到底这4个整数是怎么加入结点的...? 环境 turbo pascal 7.0
program LB;
type pointer=^rec;
rec=record
data:integer;
next:pointer
end;
var head:pointer;
procedure creat(var h:pointer);
var p,q:pointer; x,n:integer;
begin
n:=0;h:=nil;read(x);
while x<>9999 do
begin
new(p);
n:=n+1;p^.data:=x;
if n=1 then h:=p
else q^.next:=p;
q:=p;read(x);
end;
if h<>nil then q^.next:=nil;
dispose(p);
end;
procedure print(head:pointer);
var q:pointer;n:integer;
begin
n:=0;q:=head;
while q<>nil do
begin
write(q^.data:8);n:=n+1;
if n mod 5=0 then writeln;
q:=q^.next;
end;
end;
begin
creat(head);
print(head);
readln;
readln;
end.
介绍:第一个procedure输入一系列整数并存入链表.第二个procedure输出链表中的所有整数,5个一行.
问题是运行中发现,所有的存入整数都能正常显示,但是每次都会自动加上4210 -15106 -30710 0这4个整数,怎么检查都不知道程序哪里不正确.当用户输入9999时,尾结应该是nil才对,而当结点为nil时,第二个procedure应该不会再继续输出了呀..到底这4个整数是怎么加入结点的...? 环境 turbo pascal 7.0
program LB;
type pointer=^rec;
rec=record
data:integer;
next:pointer
end;
var head:pointer;
procedure creat(var h:pointer);
var p,q:pointer; x,n:integer;
begin
n:=0;h:=nil;read(x);
while x<>9999 do
begin
new(p);
n:=n+1;p^.data:=x;
if n=1 then h:=p
else q^.next:=p;
q:=p;read(x);
end;
if h<>nil then q^.next:=nil;
dispose(p);
end;
procedure print(head:pointer);
var q:pointer;n:integer;
begin
n:=0;q:=head;
while q<>nil do
begin
write(q^.data:8);n:=n+1;
if n mod 5=0 then writeln;
q:=q^.next;
end;
end;
begin
creat(head);
print(head);
readln;
readln;
end.