课堂作业二 PAT1025 反转链表
MyGitHub
终于~奔溃了无数次后,看到这个结果 ,感动得不要不要的::>_<::

题目在这里
题目简述:该题可大致分为 输入链表 -> 链表节点反转 -> 两个步骤
输入链表:对于每个输入的值都要附带输入 存储该值的空间地址 和 下一个节点的地址,本来想用比较方便→_→但是只会不太会用,只能老老实实地用数组下标做地址名,建立结构体以存储附带数据。
输入即简化为对于地址为adr的节点,存储进a[adr]中。完成数组输入后,以第一个地址为起点,a[adr].afterstr为线索,一直找到某个节点使其a[adr].afterstr==-1为止,循环开辟链表空间并输入。
链表节点反转:head->1->2->3->4->5->..->tail 我的方法是,三个指针 temp 、 q和p ,temp作为头指针,*p指向待反转的指针的前一位,假若k=4,从4开始 temp->4->1->2->3->5 , temp->4->3->1->2->5... temp->4->3->2->1->5,然后temp初始化,以1作为头指针的位置,重复上述循环。
链表输出:打代码时,输出一直忘了更新一下,输出应该为当前节点的下一个节点地址→_→ 并且输出的截止点不应该为p ->afterstr==-1 而是p ->next!= NULL (坑了一脸的血泪)
...然后就好了
注意:输入的节点可能不在链表上,因此要加一个计数器 count~
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
struct MyStruct //建立节点相关信息数据结构
{
int afterstr;
int theadr;
int num;
MyStruct *next;
};
struct list //创建链表
{
int afterstr;
int num;
}a[100001];
int main()
{
int count = 0, times;
int adr, n, k;
int i, j;
int theastr, afterstr, num;
scanf("%d %d %d", &adr, &n, &k); //输入头结点地址
if (adr == -1)
{
printf("-1\n");
return 0;
}
for (i = 0; i < n; i++)
{
scanf("%d %d %d", &theastr, &num, &afterstr); //存入数组中
a[theastr].afterstr = afterstr;
a[theastr].num = num;
}
MyStruct *head, *pnew, *tail, *p, *q, *temp;
head = (MyStruct*)malloc(sizeof(MyStruct));
head->next = NULL;
tail = head;
for (theastr = adr; theastr != -1; theastr = a[theastr].afterstr) //存入连表中
{
pnew = (MyStruct*)malloc(sizeof(MyStruct)); //开辟新节点
pnew->num = a[theastr].num;
pnew->afterstr = a[theastr].afterstr;
pnew->theadr = theastr;
tail->next = pnew;
tail = pnew;
count += 1;
}
times = count / k;
p = head->next;
temp = head;
for (i = 0; i < times; i++) //链表反转
{
for (j = 0; j < k - 1; j++)
{
q =p->next;
p->next = q->next;
q->next =temp->next;
temp->next = q;
}
temp = p; //重置头指针地址
if (p->next == NULL)break;
p = p->next;
}
for (p = head->next; p ->next!= NULL; p = p->next) //打印链表
{
printf("%05d %d %05d\n", p->theadr,p->num,p->next->theadr);
}
printf("%05d %d -1\n", p->theadr, p->num);
return 0;
}
顺便,pta两题:
#include<stdio.h>
class Date
{
public:
int year;
int month;
int day;
};
int main()
{
int monthday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
Date data;
int count;
while (scanf("%d%d%d",&data.year,&data.month,&data.day)!=EOF)
{
count = 0;
if (data.year == 0 && data.month == 0 && data.day == 0)
break;
if (data.year % 4 == 0 )
{
if (data.year % 100 == 0)
{
if (data.year % 400 == 0)
{
monthday[2] = 29;
}
}
else
{
monthday[2] = 29;
}
}
for (int i = 0; i < data.month; i++)
{
count += monthday[i];
}
count += data.day;
printf("%d\n", count);
}
return 0;
}
#include<stdio.h>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
#define MAX 1000000
class dormistry {
public:
string name;
int height;
int weight;
};
int dors[MAX] = { 0 };
dormistry dor[MAX];
int dornum[MAX];
int main()
{
int i,j=0,n;
string names;
int nums;
int heights;
int weights;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
cin >> nums >> names >> heights >> weights;
getchar();
//scanf_s("%d %s %d %d", &nums,&names, &heights, &weights);
if (dors[nums] == 0)
{
dors[nums] = 1;
dor[nums].name = names;
dor[nums].height = heights;
dor[nums].weight = weights;
dornum[j++] = nums;
}
else if (dors[nums] == 1)
{
if (heights > dor[nums].height)
{
dor[nums].name = names;
dor[nums].height = heights;
dor[nums].weight = weights;
}
}
}
sort(dornum, dornum + j );
for (i = 0; i < j; i++)
{
printf("%06d ",dornum[i]);
cout<<dor[dornum[i]].name<< " " << dor[dornum[i]].height<< " " << dor[dornum[i]].weight<<endl;
}
return 0;
}
课堂作业二 PAT1025 反转链表的更多相关文章
- C++课堂作业二之反转链表
1问题链接: https://www.patest.cn/contests/pat-b-practise/1025 2解题想法: 这题原来用数组打过,现在是想保留暂存数据的数组,然后按顺序提取出来到创 ...
- C++课堂作业_02_PAT1025.反转链表
The 1st classwork of the C++ program 题目:PAT.1025.反转链表 github链接:Click Here mdzz,做完题目的第一感受= = 这道题的题意就是 ...
- 20155213 第十二周课堂作业MySort
20155213 第十二周课堂作业MySort 作业要求 模拟实现Linux下Sort -t : -k 2的功能 参考 Sort的实现 提交码云链接和代码运行截图 初始代码 1 import java ...
- 2、java数据结构和算法:单链表: 反转,逆序打印, 合并二个有序链表,获取倒数第n个节点, 链表的有序插入
什么也不说, 直接上代码: 功能点有: 1, 获取尾结点 2, 添加(添加节点到链表的最后面) 3, 添加(根据节点的no(排名)的大小, 有序添加) 4, 单向链表的 遍历 5, 链表的长度 6, ...
- 剑指Offer面试题:15.反转链表
一.题目:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 链表结点定义如下,这里使用的是C#描述: public class Node { public in ...
- python中使用递归实现反转链表
反转链表一般有两种实现方式,一种是循环,另外一种是递归,前几天做了一个作业,用到这东西了. 这里就做个记录,方便以后温习. 递归的方法: class Node: def __init__(self,i ...
- 剑指offer 15:反转链表
题目描述 输入一个链表,反转链表后,输出新链表的表头. 法一:迭代法 /* public class ListNode { int val; ListNode next = null; ListNod ...
- 【Java】 剑指offer(24) 反转链表
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头 ...
- 反转链表 Reverse Linked List
2018-09-11 22:58:29 一.Reverse Linked List 问题描述: 问题求解: 解法一:Iteratively,不断执行插入操作. public ListNode reve ...
随机推荐
- OpenGL FAQ
转自:http://www.cnblogs.com/indif/archive/2011/04/22/2024659.html 1.什么是OpenGL?OpenGL即开放图形库(Open Graphi ...
- unity3d随机地牢生成代码
现在也是处于失业状态,碰巧看到个面试题是要用unity生成个随机地牢,就把做题过程中的思路和代码记录一下吧. 做完了以后我又想了一下,发现其实根本不需要这么麻烦,果然demo里的代码对我的思路影响还是 ...
- ASP.NET Core 在 Swagger UI 中显示自定义的 Header Token
Swagger 是个好东西,对于前后端分离的网站来说,不仅是提高前后端开发人员沟通效率的利器,也大大方便了后端人员测试 API.有时候,API 中可能需要在 Header 中设置认证参数,比如 aut ...
- java动态代理原理
我们经常会用到Java的动态代理技术, 虽然会使用, 但是自己对其中的原理却不是很了解.比如代理对象是如何产生的, InvocationHandler的invoke方法是如何调用的?今天就来深究下Ja ...
- Winform MDI窗体容器,权限以及简单通讯
MDI窗体容器: 一般来说,窗体是顶级容器,不允许放在其他任何容器内,但是如果将某个窗体的IsMdiContainer属性设置为True,那此窗体就会成为窗体容器,可以在其中放入其他窗体 在内部的窗体 ...
- 【Spring】非Spring IOC容器下获取Spring IOC上下文的环境
前言 在Spring Web项目中,有些特殊的时候需要在非Spring IOC容器下获取Spring IOC容器的上下文环境,比如获取某个bean. 版本说明 声明POM文件,指定需引入的JAR. & ...
- 简单的方式优化mysql
参考博客 自己笔记本上向mysql导入txt数据,有一个table导入了将近4个小时,而且多个table之间都是相互之间存在关系的,所以做联合查询的时候你会发现问题会十分的多,我之前联合查询两个表就死 ...
- 前台JS(type=‘file’)读取本地文件的内容,兼容各种浏览器
[自己测了下,能兼容各种浏览器,但是读取中文会出现乱码.自己的解决方法是用notepad++把txt文件编码改为utf-8(应该是和浏览器编码保持一致吧?..)] 原文 http://blog.cs ...
- Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程
Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程 这里的函数式编程的设计以muduo为例进行对比说明: Reactor实现架构对比 面向对象的设计类图如下: 函数式编程以muduo为例 ...
- YII 伪静态 IIS7 方法 web.config
YII 伪静态 IIS7 方法 web.config <?xml version="1.0" encoding="UTF-8"?> <conf ...