阅读背景:

将带头结点的有序单链表A和B合并成一个新的有序表C……

来源:互联网 

问题链接……

运行结果:


#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



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: