首页 > 其他分享 >L2-002 链表去重(25分)

L2-002 链表去重(25分)

时间:2024-03-14 11:56:01浏览次数:16  
标签:pr va vb back 链表 002 second L2 push

代码真的好烂啊。
一个元素加入之前,修改集合中(va,vb)最后一个元素的下一个地址为当前元素的地址。
然后我是把(元素地址,下一个地址)和(元素的值)拆开放到两个集合了,放一个里面有点麻烦不太会处理。

#include <bits/stdc++.h>
using namespace std;
int vis[10010];//是否已经来过 
vector<pair<string, string>> va, vb;//va保留下来 vb删除掉的  
vector<int> av, bv;
int main() {
	string s;
	int n;
	cin >> s >> n;//s第一个节点的地址 n总共的节点数量 
	map<string, pair<string, int>> mp;//需要根据其实地址找到下一个地址 
	for (int i = 0; i < n; i++) {
		string a, c;
		int b;
		cin >> a >> b >> c;
		pair<string, int> pr;
		pr.first = c;
		pr.second = b;
		mp[a] = pr;
	}
	vis[abs(mp[s].second)] = 1;
	va.push_back(make_pair(s, "-1"));
	av.push_back(mp[s].second);
	string x = s;
	while (mp[x].first != "-1") {
		//处理父亲
		pair<string, string> npr;//创建新节点 
		string parent = mp[x].first;
		int parentv = mp[parent].second;
		if (!vis[abs(parentv)]) {//没有出现过 
			pair<string, string> pr = va.back();//起始下一个 
			pr.second = parent;
			va.pop_back();
			va.push_back(pr);
			npr.first = parent;
			npr.second = "-1";
			va.push_back(npr);
			av.push_back(parentv);
			vis[abs(parentv)] = 1;
		}
		else {
			pair<string, string> pr;//起始下一个 
			if (!vb.empty()) {
				pr = vb.back();
				pr.second = parent;
				vb.pop_back();
				vb.push_back(pr);
				npr.first = parent;
				npr.second = "-1";
				vb.push_back(npr);
				bv.push_back(parentv);
			}
			else {
				pr.first = parent;
				pr.second = "-1";
				vb.push_back(pr);
				bv.push_back(parentv);
			}
		}
		x = parent;
	}
	for (int i = 0; i < va.size(); i++) {
		cout << va[i].first << " " << av[i] << " "<<va[i].second << endl;
	}
	for (int i = 0; i < vb.size(); i++) {
		cout << vb[i].first << " " << bv[i] << " "<<vb[i].second << endl;
	}
	return 0;
}

标签:pr,va,vb,back,链表,002,second,L2,push
From: https://www.cnblogs.com/chengyiyuki/p/18072542

相关文章

  • L2-001 紧急救援
    这道题就是在dijkstra的基础上增加了一些东西。代码有参考别人,最后一步的处理很好。#include<bits/stdc++.h>usingnamespacestd;constintmaxv=0x7fffffff;intedges[510][510];//从i到j的长度intdist[510];//最短路径boolcheck[510];//是否在集合之中intnum[510......
  • 链表中的经典问题——移除链表元素I
    移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点 。 题解一,迭代法:解题思路:    1.首先需要考虑,链表为空或head节点的值等于val的情况,这里可以引入一个虚拟的哑节点dummy_node,该......
  • leetcode 24.两两交换链表中的节点
    24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1]提......
  • leetcode206. 反转链表
    一、链表(LinkedList)链表,是线性表的链式存储结构。一个链表中有若干个结点,每个结点都包含数据域和地址域两部分。数据域用于存储元素,地址域用于存储前驱或后继的地址。单链表:每个结点只有一个地址域的线性链表;双链表:每个结点都有两个地址域,分别指向前驱结点和后继结点。 ......
  • 【OJ】K 个一组翻转链表
    题目基本思路:用计数+栈实现分段,K个一组地翻转链表。#include<bits/stdc++.h>#include<stack>usingnamespacestd;structlist_node{intval;structlist_node*next;};list_node*input_list(){intval,n;scanf("%d",&n);list_node*phea......
  • 《牛客》-D小红数组操作 (链表)
    思路:采用链表进行动态维护即可我们采用map集合来模拟链表结构(用结构体也是可以的)就是输出需要一点点思考.ACcode:#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongmap<int,int>l,r;intq,x,y,op,k;voidsolve(){ cin>>q; while(q--){ cin>>o......
  • L2-033 简单计算器(Python)
    作者 陈越单位 浙江大学本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S1​ 存放数字,另一个堆栈 S2​ 存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:从 S1​ 中弹......
  • win11安装wsl2没有网络解决方法
    1、启用hyper-v2、打开hyper-v管理器-点击虚拟交换机管理器-先看下有无一个名为WSL(这个名字可以被修改,和下面对应就行)的虚拟交换机,有的话先设置为外部网络3、编辑%USERPROFILE%.wslconfig添加如下内容[wsl2]networkingMode=bridgedvmSwitch=WSLipv6=true12344、执行wsl-......
  • 142. 环形链表 IIc
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*detectCycle(structListNode*head){structListNode*slow=head,*fast=head;while(fast&&fast->next......
  • JS 链表 - 笔记
    代码:classListNode{/***@constructor*@param{number}val*@param{ListNode}next*/constructor(val,next){this.val=(val===undefined?0:val);this.next=(next===undefined?null:next);......