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