【pascal问题】有序链表插入一个数字,使仍然有序

来源:百度知道 编辑:UC知道 时间:2024/05/26 05:23:06
type
point=^node;
node=record
data:integer;
link:point;
end;
var
next,head:point;
x:integer;
procedure ins(x:integer;var head:point);
var
bef,q,aft:point;
begin
q^.data:=x;
bef:=head;
if x<=head^.data then begin q^.link:=head;head:=q;end
else begin while (bef^.link<>nil)and(bef^.data<=x) do
begin
aft:=bef;
bef:=bef^.link;
end;
if bef^.link<>nil then begin q^.link:=aft;bef^.link:=aft;end
else bef^.link:=q;
end;
end;
begin
next:=nil;
read(x);
while x>=0 do
begin
head^.data:=x;
head^.link

你的问题:
1、链表建立错误,方向反了。而且没有NEW();
所以没有真正建立链表;
2、头指针指向没有指向头节点,因为你的连表方向反了;
3、过程中判断后插入时,尾节点没有为空。也没有NEW();
不过你的判断很明确,但没有必要用过程。
下面是我修改过的程序,希望你能认真看看,我下了不少工夫。
program lianbiao;
type
point=^node;
node=record
data:integer;
link:point;
end;
var
next,head,p:point;
x:integer;
procedure ins(x:integer;var head:point);
var
bef,q,aft:point;
begin
new(q);
q^.data:=x;
bef:=head;
if x<=head^.data then begin q^.link:=head;head:=q;end
else begin while (bef^.link<>nil)and(bef^.data<=x) do
begin
aft:=bef;
bef:=bef^.link;
end;
if bef^.link<>nil then begin q^.link:=bef;aft^.link:=q;end
else begin bef^.link:=q;q^.link:=nil;end;
end;end;
begin
head:=nil;
read(x);
while x>=0 do
begin
if head=nil then begin new(next);next^.data:=x;next^.link:=nil;p:=next;head:=next;end
else begin new(next);next^.dat