此題為網易雲課堂《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);
}
}
}