- 0
- 0
- 约4.13千字
- 约 3页
- 2026-02-27 发布于北京
- 举报
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)