发布网友 发布时间:2022-04-23 03:40
共1个回答
热心网友 时间:2023-10-13 15:11
单链表设一个“哨兵”intlistt ,其值域volue为空,后继指针域next指向单链表的第一个结点。从“哨兵”出发,沿着各结点的next指针,可顺序访问单链表的每一个结点,输出升序的整数序列。初始时,我们通过下述命令构造一个空表:
new(intlist); {建立空表}
intlist^.next:=nil;
然后依次读入正整数,按照递增顺序将这些整数插入单链表中。问题是,对于一个整数x来说,如何找到插入位置,如何将整数插入该位置:
首先,我们为整数x创设一个结点p:
new(p); p^.volue:=x; {构造新结点p}
并从“哨兵” intlist出发,顺着各结点的next指针寻找结点v。按照递增要求,如果p结点插入u结点后,则
u^.volue≤p^.volue<u^.next^.volue
设v=u^.next,u和v分别为p的前趋结点和后继结点。我们将u^.next指针调整为p,p的next指针指向v,便可将p结点插入单链表。
p^.next:=v; u^.next:=p; {结点p插入单链表}
构造单链表的过程一直进行到输入负数为止。
删除序列中整数x的计算亦是从从“哨兵” intlist出发,顺着各结点的next指针寻找值域为x的结点。为了删除这个结点,必须找到它的前趋结点u,即u^.next^.volue=x。我们将u的next指针修正为指向后继结点的后继结点,即
u^.next:=u^.next^.next
便可将值域为x的结点从单链表中删去