将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不占用其他的存储空间。表中允许有重复的数据。

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

void MergeList_L(LinkList *LA,LinkList *LB,LinkList *LC)
{
	*LC = *LA;
	Node* pa = (*LA)->next;
	Node* pb = (*LB)->next;
	Node* pc;
	while(pa||pb)
	{
		if(!pa)
		{
			pc = pb;
			printf("the value of pb is %d\n",pb->data);
			printf("the value of pc is %d\n",pc->data);
			pb = pb->next;
		}
		else if(!pb)
		{
			pc = pa;
			printf("the value of pa is %d\n",pa->data);
			pa = pa->next;
			printf("the value of pc is %d\n",pc->data);
		}
		else if((pa->data)<(pb->data))
		{
			pc = pa;
			printf("the value of pa is %d\n",pa->data);
			printf("the value of pb is %d\n",pb->data);
			printf("the value of pc is %d\n",pc->data);
			pa = pa->next;
			printf("the value of pa is lower than pb.\n");

		}
		else if((pa->data)>(pb->data))
		{
			printf("the value of pa is %d\n",pa->data);
			printf("the value of pb is %d\n",pb->data);

			pc = pb;
			pb = pb->next;
			printf("the value of pc is %d\n",pc->data);
			printf("the value of pa is higher than pb.\n");
		}
		else 
		{
			printf("the value of pa is %d\n",pa->data);
			printf("the value of pb is %d\n",pb->data);
			pc = pa;
			pa = pa -> next;
			pb = pb -> next;
			printf("the value of pc is %d\n",pc->data);
			printf("the value of pa equals with pb.\n");

		}
		pc->next = (*LC)->next;
		(*LC) ->next = pc;
		//printf("the value of pa is %d\n",pa->data);
		//printf("the value of pb is %d\n",pb->data);
		//printf("the value of pc is %d\n",pc->data);
	}
		printf("the circle is in the end.");

		
		system("pause");
}

void CreateList_RA(LinkList *LA)
{
	*LA = (LinkList)malloc(sizeof(Node));
	(*LA)->next = NULL;
	int a;
	while(scanf("%d",&a)!=EOF)
	{
		Node *p=(Node*)malloc(sizeof(Node));
		p->data = a;
		p->next = (*LA)->next;
		(*LA)->next = p;
		//printf("p的值:%d\n",p->data);
	}
	system("pause");
}

void show(LinkList LC)
{
	for(Node *p = LC->next;p;p = p->next)
	{
		printf("%d\n",p->data);
	}
	system("pause");
}

int main() {
	LinkList LA;
	LinkList LB;
	LinkList LC;
	CreateList_RA(&LA);
	CreateList_RA(&LB);	
	MergeList_L(&LA,&LB,&LC);	
	show(LC);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值