课堂作业二 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 ...
 
随机推荐
- mybatis foreach的使用
			
foreach标签在批量插入数据库时非常方便,但是很容易出错,我没有注意括号的位置让我折腾了一个半小时找问题,醉醉哒,所以在这里记录一下foreach的使用. 首先,这是insert批量插入正确的代码 ...
 - er
			
电子锁管理 设备管理 设备管理 信息编辑;回收 电子锁发放 电子锁初始化,发放 记录车辆在发车时使用的电子锁 电子锁开锁联系人管理 电子锁开锁联系人管理 根据订单路线中的投点,设置每个投递点的开锁联系 ...
 - 外国javascript资源搜索
			
https://www.javascripting.com/search?q=canvas
 - JAVA程序操作hbase的Maven配置pom.xml文件
			
由于工作需要,用到Java连接Hbase读写数据.原来的方式是直接将依赖的jar包全部下载下来,然后工程里面引用. 现想重构下,改为使用Maven管理,遇到了各种坑,各种不好使,特总结下. <d ...
 - Java开发中经典的小实例-(冒泡法)
			
public class Test25 { public static void main(String[] args) { // 冒泡法 int[] array = ...
 - PHP 编译安装
			
1, 获取源码wget -O php.tar.gz http://am1.php.net/get/php-5.6.27.tar.gz/from/this/mirrortar zxvf php.tar. ...
 - Java Web应用包括些啥?
			
Tomcat服务器最重要的作用就是充当Java Web应用的容器.Java Servlet规范中对Java Web应用的定义如下: Java Web应用由一组Servlet.HTML页面.类以及其他可 ...
 - asp.net mvc bundle中数组超出索引
			
在使用bundle 来加载css的时候报错了, @Styles.Render("~/bundles/appStyles") 第一反应 以为是的css 太多了,可是当我这个style ...
 - 如何为CriteriaOperator过滤对象转换为lambda表达式,即:linq to xpo的动态where语句
			
How to convert the CriteriaOperator to a lambda expression, so, the latter expression can be used in ...
 - Asp.Net 一个请求的处理流程
			
1.浏览器请求 请求-准备环境-->处理请求 2.Aspnet 环境的创建 客户请求 IIS区分静态文件还是动态文件,静态文件直接文件返回,动态文件通过aspnet_isapi.dll进行处 ...