回 帖 发 新 帖 刷新版面

主题:单向链表遇到的问题~希望大家帮助

今天在学单向链表.模仿着网络教程,做了一个输入输出的小程序...但遇到一个问题,请高人赐教
介绍:第一个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.

回复列表 (共2个回复)

沙发



[img]http://photo.store.qq.com/http_imgload.cgi?/rurl2=ae3d2abfbced8e8e16ff1c4e8f8369c8d1ddacff90068e93d7b9cedeb94c7d543b0774fc4fe491f83210b5805983d5963b4c05eec6191e40fbd30b7a5b08b9077456bdf1a26aca80a0ef34ebbab6ebd66434850a[/img]

X=9999作为结束标记

板凳

对于
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);
中的 if h<>nil then q^.next:=nil;
      dispose(p);
可以删掉,在 Q:=P; 后面加上 q^.next:=NIL;这样就可以了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册