首页 > 其他分享 >北林OJ题227、228

北林OJ题227、228

时间:2023-09-26 21:33:38浏览次数:54  
标签:tmp LNode LA next 北林 pnode pa 227 OJ

记录一下自己做的题

227交集

#include <iostream>
using namespace std;

//求有序链表的交集
typedef int Data;
struct LNode
{
	Data data;
	LNode* next;
};
//初始化
void InitList(LNode*& L)
{
	L = new LNode;
	L->next = NULL;

}
//尾插法创建链表
void CreateList_B(LNode*& L, int n)
{
	
	LNode* p = L;
	for (int i = 0; i < n; i++)
	{
		//创建临时节点
		LNode* tmp = new LNode;
		cin >> tmp->data;
		//插入
		p->next = tmp;
		tmp->next = NULL;
		//更新P
		p = p->next;
	}
	
}
//尾删销毁链表
LNode * DestoryList_B(LNode*& L)
{
	if (!L)
	{
		return L;
	}
	if (L->next == NULL)
	{
		delete L;
		L = NULL;
		return L;
	}
		LNode* p = L;
		//找到倒数第二个节点,删除倒数第一个节点
		while (p->next->next != NULL)
		{
			p = p->next;
		}
		//删除
		/*LNode* tmp = p->next;
		delete tmp;*/
		delete p->next;
		p->next = NULL;
		//删除尾节点
		DestoryList_B(L);

}
//删除某节点
LNode* DeleteNode(LNode*& L, LNode* pnode)
{
	LNode* tmp = L->next;
	if (tmp == pnode)
	{
		L->next = pnode->next;
		delete pnode;
		return L->next;
	}
	//找到pnode的前一个结点——tmp
	while (tmp->next != pnode)
	{
		tmp = tmp->next;
	}
	tmp->next = pnode->next;
	delete pnode;
	return tmp->next;
}
//有序链表的交集
void IntersectionList(LNode*& A, LNode*& B)
{
	//与空集的交集为空
	if (!(A->next) || !(B->next))
	{
		A->next = NULL;
		return;
	}
	//临时变量
	LNode* pa = A->next, * pb = B->next;
	//循环
	while (pa && pb)
	{
		//递增集合
		//比较,取小的后移
		if (pa->data > pb->data)
		{
			pb = pb->next;
		}
		else if (pa->data <pb->data)
		{
			LNode* p = pa;
			pa=DeleteNode(A, p);

		}
		else//相等
		{
			//更新
			pb = pb->next;
			pa = pa->next;
			
		}
	}
	
	//释放pa以及pa后的节点——尾删
	if (!pa)
		return;
	else
	{
		//删除pa及以后元素
		//LNode* p = pa;
		DestoryList_B(pa->next);
		DeleteNode(A,pa);
		/*LNode* p = A;
		while (p->next != pa)
		{
			p = p->next;
		}*/

		//delete pa;
		//pa = NULL;
		//p = NULL;
		
	}
	
}
//打印链表
void PrintList(LNode*& L)
{
	LNode* p = L->next;
	while (p)
	{
		cout << p->data;
		if (p->next != NULL)
			 cout<< " ";
		
		p = p->next;
	}
	cout << endl;
}
//void test1()
//{
//	//多组输入
//	while (1)
//	{
//		LNode* LA, * LB;
//		//初始化
//		InitList(LA);
//		InitList(LB);
//		int n1 = 0, n2 = 0;
//		cin >> n1 >> n2;
//		if (n1 == 0 && n2 == 0)
//		{
//			break;
//		}
//		CreateList_B(LA, n1);
//		CreateList_B(LB, n2);
//		IntersectionList(LA, LB);
//		//打印
//		PrintList(LA);
//		
//	}
//	
//
//}
void test1()
{
	int n1 = 0, n2 = 0;
	//cin >> n1 >> n2;
	//多组输入
	while (1)
	{
		LNode* LA, * LB;
		//初始化
		InitList(LA);
		InitList(LB);
		cin >> n1 >> n2;
		if (n1 == 0 && n2 == 0)
		{
			break;
		}
		CreateList_B(LA, n1);
		CreateList_B(LB, n2);
		IntersectionList(LA, LB);
		//打印
		PrintList(LA);
		//cin >> n1 >> n2;

	}

	//while (n1!=0&&n2!=0)
	//{
	//	LNode* LA, * LB;
	//	//初始化
	//	InitList(LA);
	//	InitList(LB);
	//	if (n1 == 0 && n2 == 0)
	//	{
	//		break;
	//	}
	//	CreateList_B(LA, n1);
	//	CreateList_B(LB, n2);
	//	IntersectionList(LA, LB);
	//	//打印
	//	PrintList(LA);
	//	cin >> n1 >> n2;

	//}


}
//测试函数
void test2()
{
	LNode* LA,*LB;
	//初始化
	InitList(LA);
	InitList(LB);

	CreateList_B(LA, 4);
	CreateList_B(LB, 4);
	IntersectionList(LA, LB);
	PrintList(LA);

}
int main()
{
	//test2();
	test1();

	
	

	return 0;
}

228差集

#include <iostream>
using namespace std;
//求有序链表的差集
typedef int Data;
struct LNode
{
	Data data;
	LNode* next;
};
//初始化
void InitList(LNode*& L)
{
	L = new LNode;
	L->next = NULL;

}
//尾插法创建链表
void CreateList_B(LNode*& L, int n)
{

	LNode* p = L;
	for (int i = 0; i < n; i++)
	{
		//创建临时节点
		LNode* tmp = new LNode;
		cin >> tmp->data;
		//插入
		p->next = tmp;
		tmp->next = NULL;
		//更新P
		p = p->next;
	}

}
//尾删销毁链表
void DestoryList_B(LNode*& L)
{
	if (!L)
	{
		return;
	}
	if (L->next == NULL)//error
	{
		delete L;
		return;
	}
	LNode* p = L;
	//找到倒数第二个节点,删除倒数第一个节点
	while (p->next->next != NULL)
	{
		p = p->next;
	}
	//删除
	/*LNode* tmp = p->next;
	delete tmp;*/
	delete p->next;
	p->next = NULL;
	//删除尾节点
	DestoryList_B(L);

}
//删除某节点
LNode* DeleteNode(LNode*& L, LNode* pnode)
{
	LNode* tmp = L->next;
	if (tmp == pnode)
	{
		L->next = pnode->next;
		delete pnode;
		return L->next;
	}
	//找到pnode的前一个结点——tmp
	while (tmp->next != pnode)//error——tmp=nullptr
	{
		tmp = tmp->next;
	}
	tmp->next = pnode->next;
	delete pnode;
	return tmp->next;
}
//有序链表的差集——未删链表B
void DifSetList(LNode*& A, LNode*& B)
{
	//与空集的差集为原集合
	if (!(A->next) || !(B->next))
	{
		return;
	}
	//临时变量
	LNode* pa = A->next, * pb = B->next;
	////要存储的链表C
	//LNode* C = A;
	//LNode* pc = C;//pc开始时指向A的头节点
	//循环
	while (pa && pb)
	{
		//递增集合
		//比较,取小的后移
		if (pa->data > pb->data)//error——pa=0xFFFFFFFFFFFFFFFF
		{
			pb = pb->next;
		}
		else if (pa->data < pb->data)
		{
			pa = pa->next;
		}
		else//相等
		{
			//删除A的该节点
			pa=DeleteNode(A,pa);
			//更新
			pb = pb->next;
			 
		}

	}
}
//打印链表
void PrintList(LNode*& L)
{
	LNode* p = L->next;
	int count = 0;
	while (p)
	{
		count++;
		cout << p->data;
		if (p->next != NULL)
			cout << " ";

		p = p->next;
	}
	cout << endl;
	cout << count << endl;
}
void test1()
{
	int n= 0, m = 0;
	while (1)
	{
		LNode* A, * B;
		InitList(A);
		InitList(B);
		cin >> n >> m;
		if (n==0&&m==0)
		{
			break;
		}
		CreateList_B(A, n);
		CreateList_B(B, m);
		DifSetList(A, B);
		//打印
		PrintList(A);

	}
}
int main()
{
	test1();
	return 0;
}

标签:tmp,LNode,LA,next,北林,pnode,pa,227,OJ
From: https://blog.51cto.com/u_15805257/7614696

相关文章

  • 北林OJ204、211、212、214
    204#include<iostream>#include<string>#include<iomanip>#defineMaxsize100usingnamespacestd;structBook{stringno;stringname;doubleprice;};structsqlist{Bookelem[Maxsize];intlength;};//初始化voidInit(sqlis......
  • Csproj 编译输出引用Nuget包内的资源文件
    组内有个组件,对外部Nuget包Microsoft.Web.WebView2封装。因为WebView2对自身有一些资源文件依赖,资源文件需要随编译输出到启动目录,WebView2直接加载启动目录下相应文件。 如果上层应用同时引用Microsoft.Web.WebView2,自然会输出对应的资源文件。但应用层很容易遗漏对Microsof......
  • ios 识别emoji 表情 java数据库
    INSERTintoapp_emoji(code)VALUES('0x1F603'),('0x1F604'),('0x1F601'),('0x1F606'),('0x1F979'),('0x1F605'),('0x1F602'),('0x1F923'),('0x1F972'),('0x263A'),(&......
  • nginx-clojure nginx 1.25.2 版本docker 镜像
    主要是测试下nginx-clojure有nginx1.25.2的兼容性,顺便基于原有的构建弄一个方便测试的debug版本的镜像构建构建命令实际结合业务修改下./configure--prefix=--sbin-path=nginx--conf-path=conf/nginx.conf--error-log-path=logs/error.log--http-log-path......
  • QOJ 5175 翻修道路
    QOJ传送门考虑\(1\)到其他关键城市的最短路的并是一棵以\(1\)为根的外向树,考虑在外向树上从叶子往根dp。设\(f_{u,i,S}\)为当前在点\(u\),已经翻修了\(i\)条道路,当前已经经过的关键点集合为\(S\),最短路最大值的最小值。转移有两种情况,一种是在外向树上往父亲的边......
  • QOJ 5019 整数
    QOJ传送门考虑从低位向高位dp,设\(f_{i,S}\)为考虑到从低到高第\(i\)位,当前每个数超出上界的情况为\(S\)。转移可以枚举这一位填的数:若\(a_j=0,r_j=1\),那么这一位一定不会超出上界;若\(a_j=1,r_j=0\),那么这一位一定会超出上界。否则情况和之前相同。容......
  • QOJ 5089
    你细品巨大多太阳的题解,虽然看不懂,但是发现挺有道理的。容易发现,一个无向图是可环覆盖图,当且仅当所有点的度数为偶数。所以将一条边\((u,v)\)看作集合\(\{u,v\}\),相当于求选出\(i\in[0,m]\)个集合\(\{u_i,v_i\}\),其对称差为\(\varnothing\)的方案数。考虑集合幂级数,由......
  • 12_使Typecho支持Emoji表情
    这是一篇原发布于2020-01-0218:25:00得益小站的文章,备份在此处。概述Typecho默认不支持emoji表情,其实不是程序的锅,而是由于编码的问题,只需要将默认的数据库编码utf8修改为utf8mb4即可。另外,utf8mb4编码只有在PHP5.5以后才支持。起因想给这个文章加个的?的emoji表情。[postc......
  • BZOJ 生日礼物
    题目背景翰翰18岁生日的时候,达达给她看了一个神奇的序列$A_1,A_2,\dots,A_n$。她被允许从中选择不超过$M$个连续的部分作为自己的生日礼物。翰翰想要知道选择元素之和的最大值。你能帮助她吗?解题思路可以先合并序列中连续的同为正或负的值,使原序列变为一个一正一......
  • 【POJ 3253】Fence Repair 题解(贪心算法+优先队列+哈夫曼树)
    农夫约翰想修理牧场周围的一小段围栏。他测量了围栏,发现他需要N(1≤N≤20000)块木板,每块木板都有一定的整数长度Li(1≤Li≤50000)单位。然后,他购买了一块长度刚好足以锯入N块木板的长木板(即,其长度为Li长度的总和)。FJ忽略了“切口”,即锯切时锯屑损失的额外长度;你也应该忽略它。FJ伤心地......