递增合并单链表,无重复元素。

#define _CRT_SECURE_NO_WARINING
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define Status int
//初始化链表
typedef struct Lnode {
	int data; //数据域
	struct Lnode* next; //指针域

}Lnode,*LinkList;

LinkList CreateList_R(LinkList L, int n)
{
	int i,data;
	L = (LinkList)malloc(sizeof(Lnode));
	L->next = NULL;
	Lnode* Ptail = NULL;
	LinkList Pnew = NULL;
	Ptail = L;
	printf("请输入%d个数字:\n",n);

	for (i = 0; i < n; i++)
	{
		Pnew = (LinkList)malloc(sizeof(Lnode));
		scanf_s("%d", &data);
		Pnew->data = data;
		Ptail->next = Pnew;
		Ptail = Pnew;

	}
	Pnew->next = NULL;
	return L;
}

void Print(LinkList head)
{
	Lnode *h = head->next;
	if (h ==NULL)
	{
		printf("The link is NULL");
	}
	while (h != NULL)
	{
		printf("%d ", h->data);
		h = h->next;
	}
}

LinkList match(LinkList P1, LinkList P2, LinkList P3)
{

	Lnode* pa=P1->next, * pb=P2->next,*q=P2->next;
	P3 = P1;
	Lnode* pc = P3;
	while (pa && pb)
	{
		if (pa->data < pb->data)
		{
			pc->next = pa;
			pc = pa;
			pa = pa->next;
		}
		else if(pa->data > pb->data)
		{
			pc->next = pb;
			pc = pb;
			pb = pb->next;
		}
		else { //当元素相等时,取pa的元素,并删除pb的元素
			pc->next = pa;
			pc = pa;
			pa = pa->next;
			q = pb->next;//存放pb之后的元素
			free(pb);//删除pb的元素
			pb = q;//此时pb等于原来相等的元素的下一个元素。
		}
	}
	pc->next = pa ? pa : pb;
	free(P2);

	return P3;
 }

int main()
{
	LinkList L1,L2,L3;
	int i=0;
	L1 = NULL;
	L2 = NULL;
	L3 = NULL;
	L1=CreateList_R(L1, 3);
	L2=CreateList_R(L2, 4);
	L3 = match(L1, L2,L3);
	Print(L3);
	return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值