pta重排链表(一个很清晰的实现,完全模拟链表的实现)

news/2024/9/19 9:15:36/文章来源:https://www.cnblogs.com/windzhao6/p/18417016

include

include

include <unordered_map>

include

using namespace std;

const int N = 100010;
unordered_map<string, string> neStr;
unordered_map<string, int> eStr;
string headStr;
int n;

// 反转链表函数(字符串版本)
string reverse(string headStr) {
string curStr = headStr, prevStr = "-1";
while (curStr != "-1") {
string tempStr = neStr[curStr];
neStr[curStr] = prevStr;
prevStr = curStr;
curStr = tempStr;
}
return prevStr;
}

// 获取链表的中间节点
string getMidNode(string headStr) {
if (neStr[headStr] == "-1") return headStr;
string fast = headStr;
string slow = headStr;
while (neStr[fast] != "-1" && neStr[neStr[fast]] != "-1") {
fast = neStr[neStr[fast]];
slow = neStr[slow];
}
return slow;
}
void print(string l)
{
string cur = l;
while (cur != "-1")
{
cout << eStr[cur] << ' ';
cur = neStr[cur];
}
}
// 合并两个链表
void merge(string l1, string l2) {

while (l1 != "-1" && l2 != "-1")
{string n1 = neStr[l1], n2 = neStr[l2];neStr[l2] = l1;neStr[l1] = n2;l2 = n2;l1 = n1;
}

}

int main() {
cin >> headStr;
cin >> n;
for (int i = 1; i <= n; i++) {
string addrStr, nextStr;
int data;
cin >> addrStr >> data >> nextStr;
eStr[addrStr] = data;
neStr[addrStr] = nextStr;
}

// 处理链表
string mid = getMidNode(headStr);
string nextPart = reverse(neStr[mid]);
neStr[mid] = "-1"; // 断开链表的前半部分和后半部分/*cout << endl;
print(headStr);
cout << endl;
print(nextPart);*/
merge(headStr, nextPart);cout << endl;
// 打印链表
string cur = nextPart;while (cur != "-1") {cout << setw(5) << setfill('0') << cur << ' ' << eStr[cur] << ' ' << neStr[cur] << endl;cur = neStr[cur];
}return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/798555.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

堆的应用

1.需要具备的知识 1.1以顺序存储方式存储完全二叉树 完全二叉树:节点从上到下,从左到右布局的二叉树,如下图所示。完全二叉树可以使用类似数组这种顺序存储的结构存节点,如下图。按照"层级遍历"方式遍历这棵树(还有"前序、中序、后序"遍历方式,这里不做…

Oliver编译安装(Windows10+VisualStudio2022)

Oliver是一个开源的非线性视频编辑器。主要基于Qt和FFmpeg开发。前置条件 电脑上需要的环境Qt(>=5.15) VisualStudio(2022,其他版也可) vcpkg软件安装安装Qt5.15令人糟糕的是,Qt如今变得不太容易安装。自从Qt5.15以后的版本,就取消了离线安装。所有的Qt后序版本就只能通过…

CVE-2021-24762 复现

CVE-2021-24762 复现一看是个wordpress,看了下版本6.0没洞,直接扔wpscan扫一下 发现了个插件一搜发现perfect-survey在1.5.2之前都有洞,直接搜exp打. 上官网找了个API重扫一遍,直接给出了CVE号!直接找个sqlmap的exp跑一下,注意第二个位置选n来设置cookie sqlmap -u "http…

Java后端对前端的数据进行校验

首先,作为一名后端程序员,大家一定要记住:不要相信前端传来的数据,后端程序员仿佛是国家的边境出入局的工作人员,承担这最后的防线,必须尽可能的防止错误信息的流入导致正确信息的流出。因此,后端程序员必须要对前端传来的数据进行校验。这里呢,发现一个很好的校验工具…

vp介绍

想要更多请到:https://budingcat.xyz 注册了解详情 可以点击工单进行沟通哦~

云计算与大数据概论--金功勋

week4的 week5 Hadoop介绍起源:Hadoop as a solution:Building blocks:Namenodeif other nodes fail:DataNode:Block 1Secondary Namenode:JobTracker:if fails:Topolosy clusterPig:Hive :PIGweek10 week13:

通过vscode 创建uniapp项目

一、创建项目 uniapp官网教程: https://uniapp.dcloud.net.cn/quickstart-cli.html控制台命令: npx degit dcloudio/uni-preset-vue#vite <projectName> npm i二、使用vscode运行项目

Java多线程复习

目录3种创建方式(现阶段推荐 Runnable接口)下载网上的图片(利用了commons-io中的copyUrlToFiles方法)小结买票的例子(Thread的构造方法,获取当前线程的名称,线程休眠)龟兔赛跑的例子实现Callable接口线程停止线程休眠线程礼让Join方法(main线程与Thread子线程)线程状…

大数据技术原理与应用——从入门到文档数据库

大数据技术原理与应用 3次信息化的浪潮研究问题的四个阶段大数据技术的层次大数据的计算模式PaaS物联网的概念云计算、大数据、物联网之间的关系Hadoop应用现状选择Hdoop需要考虑的因素Hadoop的定量评分(满分为5分)总体评价Ubuntu的一些基本知识(之所以不用CentOs,是因为其…

macOS Ventura 13.7 (22H123) 正式版发布,ISO、IPSW、PKG 下载

macOS Ventura 13.7 (22H123) 正式版发布,ISO、IPSW、PKG 下载macOS Ventura 13.7 (22H123) 正式版发布,ISO、IPSW、PKG 下载 2024 年 9 月 17 日凌晨 1 点,Tim Cook 领导的 Apple 今天发布了 macOS 15 Sequoia 正式版,iPhone 镜像、密码应用程序、窗口平铺更新等带来全新体…

C++11 线程同步接口std::condition_variable和std::future的简单使用

std::condition_variable条件变量std::condition_variable有wait和notify接口用于线程间的同步。如下图所示,Thread 2阻塞在wait接口,Thread 1通过notify接口通知Thread 2继续执行。具体参见示例代码:#include<iostream> #include<mutex> #include<thread>…

macOS Sequoia 15.0 (24A335) 正式版发布,ISO、IPSW、PKG 下载

macOS Sequoia 15.0 (24A335) 正式版发布,ISO、IPSW、PKG 下载macOS Sequoia 15.0 (24A335) 正式版发布,ISO、IPSW、PKG 下载 iPhone 镜像、Safari 浏览器重大更新、备受瞩目的游戏和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin…