pascal指针链表做的并归题,请教为什么错。

来源:百度知道 编辑:UC知道 时间:2024/06/16 22:33:49
输入两个链表,并将两个链表并归。
如:
1 3 5 7 9 -1
2 4 6 8 -1
write:
1 2 3 4 5 6 7 8 9
我的程序如下,请教为什么错
program lianbiao;
type
link=^nake;
nake=record
data:integer;
next:link;
end;
var
t,p,q,head1,head2,n:link;
i:integer;
begin
head1:=nil;head2:=nil;read(i);
while i<>-1 do
begin
if head1=nil then begin new(p);p^.data:=i;p^.next:=nil;q:=p;head1:=p;end
else begin new(p);p^.data:=i;p^.next:=nil;q^.next:=p;q:=p;end;
read(i);
end;
read(i);
while i<>-1 do
begin
if head2=nil then begin new(p);p^.data:=i;p^.next:=nil;q:=p;head2:=p;end
else begin new(p);p^.data:=i;p^.next:=nil;q^.next:=p;q:=p;end;
read(i);
end;
t:=head1;
while t<>nil do
begin
p:=head2;n^.data:=t^.data;
while (t^.data>p^.data) and (p^.next<>nil) do
begin
q:=p;
p:=p^.next;
end;
if n^.data<head2^.data then begin n^.next

修改后的程序如下:

{$apptype console}
program lianbiao;
type
link=^nake;
nake=record
data:integer;
next:link;
end;
var
t,p,q,head1,head2,n:link;
i:integer;
begin
head1:=nil;head2:=nil;read(i);
while i<>-1 do
begin
if head1=nil then begin new(p);p^.data:=i;p^.next:=nil;q:=p;head1:=p;end
else begin new(p);p^.data:=i;p^.next:=nil;q^.next:=p;q:=p;end;
read(i);
end;
read(i);
while i<>-1 do
begin
if head2=nil then begin new(p);p^.data:=i;p^.next:=nil;q:=p;head2:=p;end
else begin new(p);p^.data:=i;p^.next:=nil;q^.next:=p;q:=p;end;
read(i);
end;
t:=head1;
while t<>nil do
begin
n:=t;t:=t^.next;
{下面的语句组完成把n^插入到head2中}
p:=head2;
while (n^.data>p^.data) and (p^.next<>nil) do p:=p^.next;
if p=head2 then {首}begin n^.next:=p; head2:=n; end
else if p^.next=nil then {尾}begin p^.next:=n; n