程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 逆序輸出的數列,逆序輸出數列

逆序輸出的數列,逆序輸出數列

編輯:關於C語言

逆序輸出的數列,逆序輸出數列


此題為網易雲課堂《C語言程序設計進階(翁凱)》第五周編程作業,參照課件中老師給的示范完成,未定義List結構體及未使用哨兵節點,題目要求及代碼如下

/*
    Name: 
    Copyright: 
    Author: 
    Date: 30/03/15 21:01
    Description: 
題目內容:
你的程序會讀入一系列的正整數,預先不知道正整數的數量,一旦讀到-1,就表示輸入結束。然後,按照和輸入相反的順序輸出所讀到的數字,不包括最後標識結束的-1。

輸入格式:
一系列正整數,輸入-1表示結束,-1不是輸入的數據的一部分。

輸出格式:
按照與輸入相反的順序輸出所有的整數,每個整數後面跟一個空格以與後面的整數區分,最後的整數後面也有空格。

輸入樣例:
1 2 3 4 -1

輸出樣例:
4 3 2 1
*/

#include <stdio.h>
#include <stdlib.h>

typedef struct Node
{
    int value;
    struct Node * next;
}Node;

Node * add(Node * head, int number);
Node * inverse(Node * head);
void print(Node * head);

int main()
{
//    freopen("in.txt", "r", stdin); // for test
    
    Node * head;
    int number;
    
    head = NULL;
    while(scanf("%d", &number) && number != -1)
        head = add(head, number);
    
    head = inverse(head);
    
    print(head);
    
//    fclose(stdin); // for test
    
    return 0;
}

Node * add(Node * head, int number)
{
    // add to linked-list
    Node * p = (Node *)malloc(sizeof(Node));
    p->value = number;
    p->next = NULL;
    // find the last
    Node * last = head;
    if(last)
    {
        while(last->next)
            last = last->next;
        // attach
        last->next = p;
    }
    else
        head = p;
        
    return head;
}

Node * inverse(Node * head)
{
    if(head != NULL && head->next != NULL)
    {
        Node * p, * q, * tmp;
        p = head;
        q = p->next;
        while(q->next)
        {
            tmp = q->next;
            q->next = p;
            p = q;
            q = tmp;
        }
        q->next = p;
        head->next = NULL;
        head = q;
    }
    
    return head;
}

void print(Node * head)
{
    Node * p, * tmp;
    
    p = head;
    if(p)
    {
        while(p)
        {
            printf("%d", p->value);
            tmp = p;
            p = p->next;
            if(p)
                printf(" ");
            else
                printf("\n");
            free(tmp);
        }
    }
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved