实验11的第11题(链表匹配)

题目要求:
输入两组数据 list A 、list B。判断list B是否为list A的子集。
两组数据均以-1结尾,且-1不计入数据。

#include<stdio.h>
#include<stdlib.h>


/*定义结构变量*/
/*命名为list,其指针为listPtr*/ 
typedef struct List{
	int num;
	struct List* next;
}list;
typedef struct List* listPtr;




/*子函数,用于输入数据*/ 
listPtr input(void);



void main()
{
	
	/*输入数据*/ 
	listPtr Ahead,Bhead;     /*设定Ahead、Bhead为A、B链表的头节点*/ 
	printf("Please input listA(end by -1):\n");
	Ahead=input();
	printf("Please input listB(end by -1):\n");
	Bhead=input();
	
	
	
	/*针对B链表中每一节点的num遍历A链表中是否存在*/
	 
	listPtr a=Ahead,b=Bhead;
	
	for(;b;b=b->next)   /*以B链表中的所有numb为循环节*/ 
	{
		for(;a;a=a->next)   /*针对B链表中的每一num遍历A链表*/ 
		{
			if(a->num==b->num)  /*判断A中存在该num*/ 
			    break;           
		}
		if(!a)                /*该情况为A中没有该num*/ 
		{
			printf("ListB is not the sub sequence of listA.");
			break;            /*跳出循环,得出结论*/ 
		}
	}
	if(!b)                    /*该情况为A中存在B链表的所有num,得出结论*/ 
	    printf("ListB is the sub sequence of listA.");
} 





/*输入数据*/ 


listPtr input(void)
{
	int number;
	listPtr head=NULL,last=NULL,now=NULL;
	/*head为头节点,last为尾节点,now为待加入链表的节点*/ 
	scanf("%d",&number);
	while(number!=-1)
	{
		now=(listPtr)malloc(sizeof(list));/*为每一数据创建内存*/ 
		now->num=number;
		now->next=NULL;
		if(head==NULL)  /*该情况为刚创建链表时没有节点,只有待加入的now节点*/ 
	    {
	    	head=now;    /*此时头节点和尾节点均为now节点*/ 
	    	last=now;
		}
		else            /*一般情况*/ 
		{
			last->next=now;  /*将原链表尾节点指针指向now节点*/ 
			last=now;       /*now节点成为新的尾节点*/ 
		}
		scanf("%d",&number);  /*输入下一待加入链表的数据*/ 
	}
	return head;         /*将输入完全的链表的头节点返回给Ahead、Bhead*/ 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值