栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

7-3链表去重(c++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

7-3链表去重(c++)

这道题就是对vector的巧用,我们先定义一个模仿链表的结构数组

struct list
{
	int data;
	int next;
}node[100001];

之后我们设法将此链表读入,这道题建议用,scanf和printf最后两个测试点可能会超时读入方法为

int first,num;scanf("%d %d",&first,&num);
for(int i=1;i<=num;i++)
{
	int addd1,data1,addd2;scanf("%d %d %d",&addd1,&data1,&addd2);
	node[addd1].data=data1;
	node[addd1].next=addd2; 
}

然后我们设两个vector数组保存正确值和重复的值设置一个find函数将是否有重复元素判断出来

int find(vector >&num,int x)
{
	for(int i=0;i 

之后就是我们的筛选操作

	while(head0!=-1)
		{   int numb=abs(node[head0].data);
		    if(find(num1,numb))
			{
			num1[0].push_back(node[head0].data);
		    num1[1].push_back(head0);
		
			}
		    else 
		    {
		    	add1[0].push_back(node[head0].data);
		    	add1[1].push_back(head0);
			}
			head0=node[head0].next;
		}

这里说明一下我这里将vector定义的是一个嵌套的,有两层一层装值,一层装假地址。

vector >num1(2);//装不重复的元素
vector >add1(2);//装重复的元素

最后就是输出操作很简单,最后一个单独输出即可

        int i;
		for(i=0;i=0&&i 
#include
using namespace std;
struct list
{
	int data;
	int next;
}node[100001];
int find(vector >&num,int x)
{
	for(int i=0;i >num1(2);
	int first,num;scanf("%d %d",&first,&num);
		for(int i=1;i<=num;i++)
		{
			int addd1,data1,addd2;scanf("%d %d %d",&addd1,&data1,&addd2);
			node[addd1].data=data1;
			node[addd1].next=addd2; 
		}
	vector >add1(2);
	int n=0;
	int head0=first;
    if(node[head0].next==-1){printf("%05d %d -1n",head0,node[head0].data);return 0;}
		while(head0!=-1)
		{   int numb=abs(node[head0].data);
		    if(find(num1,numb))
			{
			num1[0].push_back(node[head0].data);
		    num1[1].push_back(head0);
		
			}
		    else 
		    {
		    	add1[0].push_back(node[head0].data);
		    	add1[1].push_back(head0);
			}
			head0=node[head0].next;
		}
		int i;
		for(i=0;i=0&&i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009242.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号