回 帖 发 新 帖 刷新版面

主题:[讨论]关于链表的一个不懂得!

这是链表的代码,绝对没错
type link=^node;
       node=record
         key:integer;
         next:link;
       end;
var head,p,q:link;
    n,m:integer;
procedure createlink;
  begin
    head:=nil;q:=head;
    readln(m);
    while m>0 do begin
      new(p);
      p^.key:=m;
      p^.next:=nil;
      if head=nil then head:=p
      else q^.next:=p;
      q:=p;
      readln(m);
    end;
  end;
procedure printlink(t:link);
  begin
    if t=nil then exit;
    write(t^.key:4);
    printlink(t^.next);
  end;
begin
  createlink;
  printlink(head);
end.
意为输入M个数,按输入顺序输出.
我的问题.
printlink的参数是HEAD,而在第一次递归时
参数时head^.next,而在创建链表时
head.next并没有被付值.高手回答.

回复列表 (共5个回复)

沙发

p^.key:=m;
p^.next:=nil;

p^.next就被赋值了

head:=p

p^.next的值赋值到head^.next上面了

板凳

问题是p^.next不是p^.next:=nil;吗?

3 楼

你应该这样理解:
指针是一个地址

q:=p;
时,q的地址和head的一样
当q^.next被赋值时,就相当于head^.next被赋值

4 楼

非常谢谢!!!!!!!!




5 楼

Program Link;
Type Point=^node;
             Data:integer;
             Next:Point;
          End;
Procedure Create(var head:Point);
Var p,q:Point;n:integer;
Begin
     While n<>-1 do begin
         If  head<>NIL then begin new(p);p^.data:=n;p^.next:=NIL;q^.next:=p;q:=p;end
                                  Else begin new(head);head^.data:=n;head^.next:=NIL;q:=head;end;
         Read(n);
     End;
End;

Procedure Print(head:Point);
Var p:Point;
Begin
     P:=head;
      While p<>NIL do begin write(p^.data,’ ’);p:=p^.next;end;
End;

Var head:Point;
Begin
     Head:=NIL;
     Create(head);
     Print(head);
End.

我来回复

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