运行结果:
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList link(LinkList S,LinkList T)//将S,T链接成新的链表并返回新链表指针……以S的顺序为主排序返回……
{
LinkList p,q,r,s,t;
int k=0;
s=S;
t=T;
if(s->next->data<s->next->next->data)k=1; //用k来控制S为递增或递减的操作k==1代表升序的操作
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=NULL;
q=p;
while(t->next!=NULL)//链接复制T链表
{
while(k==1&&q->next!=NULL&&q->next->data<=t->next->data||k==0&&q->next!=NULL&&q->next->data>=t->next->data)//用或来区别S是升序还是降序,来进行不同操作,得到不同顺序表
q=q->next;
if(q->data!=t->next->data)//如果存在相同元素,继续下一个而不存入新表中
{
r=(LinkList)malloc(sizeof(LNode));
r->data=t->next->data;
r->next=q->next;
q->next=r;
}
q=p;
t=t->next;
}
return p; //返回复制链表指针
}
void main()
{
LinkList S,T,P,q,r;
int k=0;
S=q=(LinkList)malloc(sizeof(LNode));//S带头节点
while(20-k) //为S分配空间及赋值
{
r=(LinkList)malloc(sizeof(LNode));
r->data=k;
q->next=r;
q=r;
k+=2;
}
q->next=NULL; //S的最后一个节点的下一个节点置空
k=19;
T=q=(LinkList)malloc(sizeof(LNode)); //T带头节点
while(k>0) //为T分配空间及赋值
{
r=(LinkList)malloc(sizeof(LNode));
r->data=k;
q->next=r;
q=r;
k-=2;
}
q->next=NULL; //T的最后一个节点的下一个节点置空
P=link(S,T); //调用函数得到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");
}#include<stdio.h>
#inclu