课堂作业二 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 ...
随机推荐
- RK 61 键盘 Ubuntu 下键位映射修改方案
在用户 Home 目录下面创建 .Xmodmap 文件,然后输入以下的内容: remove Lock = Caps_Lock remove Control = Control_L remove Con ...
- 微信小程序组件-----城市切换
直接上地址,有需要的直接下载,使用: https://github.com/chenjinxinlove/citySelect
- 两个NetSuite之间历史交易数据迁移的具体方案
背景与展望: 比如:公司要上市往往会要求提供过去几年的营业数据和报表等信息, 而这些信息来源于正在一直运营使用的ERP和财务系统是最可靠与真实的. NetSuite实现的ERP和财务系统的完美结合,随 ...
- Git 笔记整理3
1,git clone某一个分支 git clone -b <branch> <remote_repo> 2,.git 文件太大 :clone的时候,可以指定深度,如下,为1即 ...
- Learning by doing
Learning by doing 绪论:读了娄老师的公众号中--<做中学(Learning By Doing)>这篇文章后,深有感触,我想到很多自己之前的事情,很多都是每每想的很好,总是 ...
- QLPreViewController的初步实用
前一阵项目需要添加一个文档文件的查看功能,于是就各种找资料,一开始想实用webView,然而webView有的格式不支持,而且占内存太大了.找着找着就找到QLPreViewController.用了一 ...
- mysql的分区和分表
分区 分区就是把一个数据表的文件和索引分散存储在不同的物理文件中. mysql支持的分区类型包括Range.List.Hash.Key,其中Range比较常用: RANGE分区:基于属于一个给定连续区 ...
- Java链接MySQL练习题:格式化日期、性别;避免代码注入
一.查询人员名单,按序号 姓名 性格(男或女) 民族(某族) 生日(年月日)输出 import java.sql.*; import java.text.SimpleDateFormat; publi ...
- Android 6.0权限改变
对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要访问通讯录.短 ...
- AutoCAD .NET API 之——DimStyleTableRecord 的属性列表
DimStyleTableRecord Properties: Properties Description(描述) Dimadec 角度标注保留的有效位数 Dimalt 控制是否显示换算单位标注值中 ...