IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> PAT 1025 反转链表 (25 分)C++ -> 正文阅读

[数据结构与算法]PAT 1025 反转链表 (25 分)C++

给定一个常数?K?以及一个单链表?L,请编写程序将?L?中每?K?个结点反转。例如:给定?L?为 1→2→3→4→5→6,K?为 3,则输出应该为 3→2→1→6→5→4;如果?K?为 4,则输出应该为 4→3→2→1→5→6,即最后不到?K?个元素不反转。

输入格式:

每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数?N?(≤105)、以及正整数?K?(≤N),即要求反转的子链结点的个数。结点的地址是 5 位非负整数,NULL 地址用??1?表示。

接下来有?N?行,每行格式为:

Address Data Next

其中?Address?是结点地址,Data?是该结点保存的整数数据,Next?是下一结点的地址。

输出格式:

对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。

输入样例:

00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

输出样例:

00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1

根据视频将该部分解答后,重新分析,对于temp的使用以及链表的知识掌握具有深刻的意义。

设定一个二维数组,分别表示数据和下一地址,

定义两个变量l_address和f_address在开始第一轮循环之前或者刚开始都为100000;

开始循环后,在内部循环中l_address主要的作用是每次经过一轮循环等于此时的temp数值,temp数值在每次内循环中为指向的地址;

外部循环中f_address的作用是每次外循环,改变temp的数值,是两块之间的指针指向为反转之后的连接;同时也需要改变反转之后的l_address每次的起始位置;

最终输出数值中需要注意的一个点:

数据地址为五个数值,小于五位数的数据,空位用0填充,该部分,我们使用C语言中的cstdio头文件%05d设置。

完整参考代码如下:

#include<iostream>
#include<cstdio>
using namespace std;
int num[100001][2];
int main(){
	int address,n,k;
	int data,next;
	cin>>address>>n>>k;
	num[100000][1]=address;
	for(int i=0;i<n;i++)
	{
		cin>>address>>data>>next;
		num[address][0]=data;
		num[address][1]=next; 
	} 
	address=100000;
	n=0;
	while(num[address][1]!=-1)
	{
		address=num[address][1];
		n++;
	}
	int l_address=100000;
	for(int i=0;i<n/k;i++)
	{
		int f_address=l_address;
		address=num[f_address][1];
		for(int j=0;j<k;j++)
		{
			int temp=address;
			address=num[address][1];
			num[temp][1]=l_address;
			l_address=temp;
		}
		int temp=num[f_address][1];
		num[temp][1]=address;
		num[f_address][1]=l_address;
		l_address=temp;
	} 
	address=num[100000][1];
	while(num[address][1]!=-1)
	{
		printf("%05d %d %05d\n",address,num[address][0],num[address][1]);
		address=num[address][1];
	}
	printf("%05d %d %d\n",address,num[address][0],num[address][1]);
	return 0;
} 

参考视频链接如下

PTA 乙题训练_哔哩哔哩_bilibiliicon-default.png?t=M0H8https://www.bilibili.com/video/BV1Wi4y1V7Tc?p=25

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:49:54  更:2022-01-25 10:52:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 19:42:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码