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两题:

5-1

    #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;
}

5-2

    #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 反转链表的更多相关文章

  1. C++课堂作业二之反转链表

    1问题链接: https://www.patest.cn/contests/pat-b-practise/1025 2解题想法: 这题原来用数组打过,现在是想保留暂存数据的数组,然后按顺序提取出来到创 ...

  2. C++课堂作业_02_PAT1025.反转链表

    The 1st classwork of the C++ program 题目:PAT.1025.反转链表 github链接:Click Here mdzz,做完题目的第一感受= = 这道题的题意就是 ...

  3. 20155213 第十二周课堂作业MySort

    20155213 第十二周课堂作业MySort 作业要求 模拟实现Linux下Sort -t : -k 2的功能 参考 Sort的实现 提交码云链接和代码运行截图 初始代码 1 import java ...

  4. 2、java数据结构和算法:单链表: 反转,逆序打印, 合并二个有序链表,获取倒数第n个节点, 链表的有序插入

    什么也不说, 直接上代码: 功能点有: 1, 获取尾结点 2, 添加(添加节点到链表的最后面) 3, 添加(根据节点的no(排名)的大小, 有序添加) 4, 单向链表的 遍历 5, 链表的长度 6, ...

  5. 剑指Offer面试题:15.反转链表

    一.题目:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 链表结点定义如下,这里使用的是C#描述: public class Node { public in ...

  6. python中使用递归实现反转链表

    反转链表一般有两种实现方式,一种是循环,另外一种是递归,前几天做了一个作业,用到这东西了. 这里就做个记录,方便以后温习. 递归的方法: class Node: def __init__(self,i ...

  7. 剑指offer 15:反转链表

    题目描述 输入一个链表,反转链表后,输出新链表的表头. 法一:迭代法 /* public class ListNode { int val; ListNode next = null; ListNod ...

  8. 【Java】 剑指offer(24) 反转链表

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头 ...

  9. 反转链表 Reverse Linked List

    2018-09-11 22:58:29 一.Reverse Linked List 问题描述: 问题求解: 解法一:Iteratively,不断执行插入操作. public ListNode reve ...

随机推荐

  1. [linux系统]--crontab定时任务

    基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...

  2. IE8 jquery解析xml的兼容问题

    正常情况下可以这么写: jQuery(node).find(xpath.replace("//", ""))[0]; 但是在IE8下得到的是undefined应 ...

  3. easyui DataGrid 工具类之 TableUtil class

    import java.lang.reflect.InvocationTargetException;import java.util.ArrayList;import java.util.HashM ...

  4. 双层路由设置,WAN口和LAN口连接的方法设置

    WAN口设置方法,社路由器分别为路1 和路2 1 路2的LAN口地址改为172.16.1.1,重启 2 笔记本改成172.16.1.X,然后进入设置,在里面WAN地址设置为静态地址 192.168.1 ...

  5. mybatis批量插入返回主键问题

    今天整合mybatis时候用到返回主键问题,批量插入总是返回不了主键还报错. 记录入下: pom版本: <mybatis.version>3.2.6</mybatis.version ...

  6. 遗传算法在JobShop中的应用研究(part4:变异)

    下面,我们以车间调度为例来谈谈遗传算法中的另一个重要操作变异.变异操作通常发生在交叉操作之后,它的操作对象是交叉得到的新染色体.在本文中我们通过随机交换染色体的两个位置上的值来得到变异后的染色体,变异 ...

  7. java.lang.ExceptionInInitializerError /NoClassDefFoundError: [Lorg/hibernate/engine/FilterDefinition;

    java.lang.ExceptionInInitializerError at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Nati ...

  8. c++共享内存(转载)

    对于连个不同的进程之间的通信,共享内存是一种比较好的方式,一个进程把数据发送到共享内存中, 另一个进程可以读取改数据,简单记录一下代码 #define BUF_SIZE 256 TCHAR szNam ...

  9. python与C++交互

    python和C++能进行有效的交互,c++调用Python的一些小用法 写了一个python脚本导入发生异常,可能是编码问题(如存在中文),Python默认的是ASCII可加上:#!/usr/bin ...

  10. :after和:before的作用及使用方法

    1.  :before 和 :after 的主要作用是在元素内容前后加上指定内容,示例: HTML代码: <p>你好</p> CSS代码: p:before{ content: ...