链表应用代码填空练习及归并算法实现.pdfVIP

  • 0
  • 0
  • 约4.13千字
  • 约 3页
  • 2026-02-27 发布于北京
  • 举报

链表应用代码填空练习及归并算法实现.pdf

ID:Name:Class:

练习1:删除结点的单链表L中的重复结点

intdeleteDupNode(LinkList*L)

{LinkList*p,*q,*r;

p=L-next;

if(!p)return0;

while(p){

q=p;

while(q-next){

if(q-next-data!=p-data)

q=q-next;

else

{r=q-next;

q-next=r-next;

free(r);

}

}

p=p-next;

}}

练习2:假设有两个结点的单链表A、B,按元素值非递减有序,编写算法将A、B归并成一个按

元素值非递增有序的链表C,要求链表C利用A、B中的原结点空间,不可以重新申请结点。

LinkList*union(LinkList*A,LinkList*B)

{LinkList*C,*p,*q,*s;

p=A-next;

q=B-next;

/*p、q分别指向单链表A、B的第一个结点*/

C=A;C-next=NULL;

/*C表的头结点利用A表头结点的空间*/

while(pq)

{

if(p-data=q-data)

/*从链表A、B上取出当前data值较小者暂存到s中*/

{s=p;p=p-next;}

else

{s=q;q=q-next;}

s-next=C-next;/*将s到C表的头部*/

C-next=s;

}

if(!q)q=p;

/*将剩余结点形成的链的链头保存到q中*/

while(q)

/*将剩余结点依次取出暂存到s中,将s到C表的头部*/

{

s=q;

q=q-next;

s-next=C-next;

C-next=s;

}

free(B);return*C;}

练习3:写一个算法逆置结点的单链表L,要求逆置后的单链表利用L中的原结点,不可以重新

申请结点空间。

voidreverse(Linklist*L)

{Linklist*p,*q;

p=L-next;/*p指向第一个数据结点*/

L-next=NULL;/*将原链表置为空表L*/

while(p)

{

q=p;

p=p-next;

q-next=L-next;

L-next=q;

文档评论(0)

1亿VIP精品文档

相关文档