问题链接……
#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");
}