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. 谈谈html5存储之IndexdDB

    IndexdDB简介 html5中indexdDB是一种能在浏览器持久的存储结构化数据的数据库:且具有丰富的查询能力. 新建一个IndexdDB数据库 IDBOpenDBRequest定义有几个重要的 ...

  2. cmd 下切换目录

    隔了段时间没用cmd 工作台,发现不会切换目录了,感觉特sb,为避免再次出现sb情况,记下来在说 1.切换磁盘(磁盘字母) d: 2.切换到指定目录 cd d:\www 在cmd下执行php文件 c: ...

  3. list中的中文转换编码显示

    for i in range(1,sheet.nrows): row=sheet.row_values(i,0,sheet.ncols) row=str(row).replace('u\'','\'' ...

  4. 。net 之view筛选

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  5. sql的各种join连接

    SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name id name id name -- ---- -- ---- ...

  6. Apache2.4权限配置(原创帖-转载请注明出处)

    ==================说在前面的话================= 1:这次实验使用的php项目是Discuz,Discuz的安装请参照:http://www.cnblogs.com/ ...

  7. cocos2dx && Lua 环境配置

    需要的材料: 1.vs2013 2.python-2.7.3(2.7.x高于2.7的版本可能会出现错误) 3.Sublime Text 2(破解的) 4.cocos2dx-3.2 步骤: 1.安装vs ...

  8. 面对对象之@classmethod、@staticmethod用法

    @classmethod用法(修饰的函数,第一个参数cls默认是类名,调用方法:实例对象或类对象.方法) class C_mthod(object): name = "f**k" ...

  9. Winform MDI窗体容器 权限 简单通讯

    MDI窗体容器 权限  using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...

  10. GitHub注册账号

    username : hcloudypassword : hujunyun3174email : 370284221@qq.com