⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 设A与B分别为两个带有头结点的有序循环链表(所谓有序是指链接点按数据域值大小链接
💻 CPP
字号:
#include<stdio.h>
#include<malloc.h>
typedef struct LNode
{
	int data;
	struct LNode *next;
}LNode;
struct LNode* creat_List(int n)
{//输入n个元素值,建立带头结点的单链循环表l
	struct LNode *p,*l;
	int i;
	l=(struct LNode*)malloc(sizeof(LNode));//建立头结点
	printf("请输入数据(从大到小):\n");
	for(i=1;i<=n;i++)
	{
		p=(struct LNode*)malloc(sizeof(LNode));
		scanf("%d",&p->data);
		if(i==1)
			p->next=l;//如果i=1,直接构成循环链表
		else
			p->next=l->next;
		l->next=p;//从后往前依次插入数据,建立循环链表
	}
	return(l);//返回l
}
struct LNode *reverse_List(struct LNode *l1,struct LNode *l2)
{//归并l1,l2两顺序存储数据链表为表l,l内数据顺序不变
	struct LNode *pa,*pb,*pc;
	pc=l1;
	pa=l1->next;
	pb=l2->next;
	while(pa!=l1&&pb!=l2)//判断是否有一个表已经连接完毕
	{
		if(pa->data>=pb->data)
		{
			pc->next=pb;
			pc=pb;
			pb=pb->next;
		}
		else
		{
			pc->next=pa;
			pc=pa;
			pa=pa->next;
		}
	}
	pc->next=pa!=l1?pa:pb;//插入剩余段
    while(pc->next!=l2&&pc->next!=l1)
		pc=pc->next;
	pc->next=l1;
	free(l2);//释放l2
	return(l1);
	
}

void printf_List(struct LNode *l)
{//输出链表
	struct LNode *p;	 
	p=l->next;
	while(p!=l)//输出直到下一节点是头结点
	{  
		printf("%d ",p->data);		 
		p=p->next;
	}
	printf("\n");//使界面整洁
}

void main()
{
	struct LNode *list1,*list2,*l;
	int n;
	printf("归并两个链表演示程序:\n");
		printf("输入链表一的长度:");
	scanf("%d",&n);//输入链表一的长度
	if(n<1)
	{
		printf("error\n");
		return;
	}
	list1=creat_List(n);//建立长为n的链表一	
    printf("输入链表二的长度:");
    scanf("%d",&n);//输入链表二的长度
    if(n<1)
	{
		printf("error\n");
		return;
	}
	list2=creat_List(n);//建立长为n的链表二
   	l=reverse_List(list1,list2);//归并表一表二
	printf("归并后的表为:\n");
	printf_List(l);//输出归并后的表
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -