• 网易云课堂_C语言程序设计进阶_第5周:链表_1逆序输出的数列


    1

    逆序输出的数列(10分)

    题目内容:

    你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束。然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1。

    输入格式:

    一系列正整数,输入-1表示结束,-1不是输入的数据的一部分。

    输出格式:

    按照与输入相反的顺序输出所有的整数,每个整数后面跟一个空格以与后面的整数区分,最后的整数后面也有空格。

    输入样例:

    1 2 3 4 -1

    输出样例:

    4 3 2 1

    时间限制:2000ms内存限制:128000kb
     
      1 #define _CRT_SECURE_NO_WARNINGS
      2 #include <stdio.h>
      3 #include <stdlib.h>
      4 struct num
      5 {
      6     int num;//数字
      7     struct num *next;//下一个结点
      8 };
      9 typedef struct num NUM;//简写
     10 
     11 //涉及4个函数
     12 NUM *Init();//创建头结点,头结点不存储数据
     13 void Add(NUM *head, int num);//插入数据到尾部
     14 void Print(NUM *head);//顺序打印,非递归
     15 NUM *Dao(NUM *head);//链表逆序,返回新的头指针
     16 
     17 void main()
     18 {
     19     int num = 1;
     20     NUM *head = Init();//创建头结点,头结点不存储数据
     21 
     22     scanf("%d", &num);
     23 
     24     while (num != -1)//输入 - 1表示结束
     25     {
     26         Add(head, num);
     27         scanf("%d", &num);
     28     }
     29 
     30     NUM *newhead = Dao(head);//链表逆序,返回新的头指针
     31 
     32     Print(newhead);//顺序打印,非递归
     33 
     34     system("pause");
     35 }
     36 
     37 NUM *Init()//创建头结点,头结点不存储数据
     38 {
     39     NUM *head = (NUM*)malloc(sizeof(NUM));//创建头结点
     40     if (head == NULL)
     41     {
     42         printf("分配内存失败
    ");
     43         return NULL;
     44     }
     45     else
     46     {
     47         head->next = NULL;//最后指向NULL
     48         return head;//返回头指针
     49     }
     50 }
     51 
     52 void Add(NUM *head, int num)//插入数据到尾部
     53 {
     54     NUM *p = head;//第1步,创建指针p,用于移动
     55     if (p == NULL)
     56     {
     57         return;
     58     }
     59     while (p->next != NULL)//遍历
     60     {
     61         p = p->next;
     62     }
     63 
     64     NUM *new = (NUM*)malloc(sizeof(NUM));//第2步,创建指针new,用于存储新数据
     65     if (new == NULL)
     66     {
     67         printf("分配内存失败
    ");
     68         return;
     69     }
     70     new->num = num;//学号
     71     new->next = NULL;//最后指向NULL
     72 
     73     p->next = new;//第3步,p指向new
     74 }
     75 
     76 void Print(NUM *head)//顺序打印,非递归
     77 {
     78     NUM *p = head;//创建指针,用于移动
     79     int count = 0;//计数器
     80 
     81     while (p->next != NULL)
     82     {
     83         if (count)
     84         {
     85             printf(" ");
     86         }
     87         printf("%d", p->next->num);
     88         p = p->next;
     89         count++;
     90     }
     91 }
     92 
     93 NUM * Dao(NUM *head)//链表逆序,返回新的头指针
     94 {
     95     NUM * p = NULL;//创建指针p
     96     NUM * q = head->next;//创建指针q
     97     NUM * r = NULL;//创建指针r
     98 
     99     while (q)
    100     {
    101         r = q->next;//指针r指向q的下一个结点
    102         q->next = p;//指针q指向前面结点
    103         p = q;//移动指针p
    104         q = r;//移动指针q
    105     }
    106 
    107     NUM *newhead = (NUM *)malloc(sizeof(NUM));//创建指针newhead,作为新头指针
    108     newhead->next = p;//新头指针指向指针p
    109     return newhead;//返回新头指针
    110 }
  • 相关阅读:
    python找出数组中第二大的数
    【高并发解决方案】5、如何设计一个秒杀系统
    如何找出单链表中的倒数第k个元素
    二叉树的前序,中序,后序遍历
    剑指Offer题解(Python版)
    python之gunicorn的配置
    python3实现字符串的全排列的方法(无重复字符)
    python实现斐波那契数列
    每天一个linux命令(56):netstat命令
    每天一个linux命令(55):traceroute命令
  • 原文地址:https://www.cnblogs.com/denggelin/p/5619531.html
Copyright © 2020-2023  润新知