您的位置:首页 > 其它

将两个带头节点链表单链表,合并成一个新的带头节点链表……

2011-09-19 17:01 302 查看
问题链接……



#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;

LinkList link(LinkList S,LinkList T)//将S,T链接成新的链表并返回新链表指针……
{
LinkList p,q,r;
p=q=(LinkList)malloc(sizeof(LNode));//带头节点
while(S->next!=NULL)//复制S链表
{
r=(LinkList)malloc(sizeof(LNode));
r->data=S->next->data;
q->next=r;
q=r;
S=S->next;
}
//q->next=T->next;//如果这样的的话,可以直接返回值,虽然没改变S,T的原有结构,但只要改变T,那么p的值也会变,改变S,p的值不会变

while(T->next!=NULL)//链接复制T链表
{
r=(LinkList)malloc(sizeof(LNode));
r->data=T->next->data;
q->next=r;
q=r;
T=T->next;
}
q->next=NULL;
return p;	//返回复制链表指针
}

void main()
{
LinkList S,T,P,q,r;
int k=10;
S=q=(LinkList)malloc(sizeof(LNode));//S带头节点
while(k)	//为S分配空间及赋值
{
r=(LinkList)malloc(sizeof(LNode));
r->data=k;
q->next=r;
q=r;
k--;
}
q->next=NULL;	//S的最后一个节点的下一个节点置空
k=10;
T=q=(LinkList)malloc(sizeof(LNode));	//T带头节点
while(k)	//为T分配空间及赋值
{
r=(LinkList)malloc(sizeof(LNode));
r->data=10-k;
q->next=r;
q=r;
k--;
}
q->next=NULL;	//T的最后一个节点的下一个节点置空
P=link(S,T);	//调用函数得到S,T链接后的新链表

printf("S:\n");	//下面为输出各链表的值
while(S->next!=NULL)
{
printf("%d ",S->next->data);
S=S->next;
}
printf("\nT:\n");
while(T->next!=NULL)
{
printf("%d ",T->next->data);
T=T->next;
}
printf("\nP:\n");
while(P->next!=NULL)
{
printf("%d ",P->next->data);
P=P->next;
}
printf("\n\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐