本實例創建單鏈表並正序輸出(代碼中 print 函數為正序遍歷,標題「反向輸出」與代碼不符,實際為正序打印)。
CreateList:頭插法(帶頭節點)創建鏈表,輸入 n 個元素值。print:從頭節點的 next 開始遍歷,順序打印各節點 data。// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鳥教程. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *LinkList;
LinkList CreateList(int n);
void print(LinkList h);
int main() {
LinkList Head = NULL;
int n;
scanf("%d", &n);
Head = CreateList(n);
printf("剛剛建立的各個鏈表元素的值為:\n");
print(Head);
printf("\n\n");
system("pause");
return 0;
}
LinkList CreateList(int n) {
LinkList L, p, q;
int i;
L = (LNode*)malloc(sizeof(LNode));
if (!L) return 0;
L->next = NULL;
q = L;
for (i = 1; i <= n; i++) {
p = (LinkList)malloc(sizeof(LNode));
printf("請輸入第%d個元素的值:", i);
scanf("%d", &(p->data));
p->next = NULL;
q->next = p;
q = p;
}
return L;
}
void print(LinkList h) {
LinkList p = h->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
}
若需逆序輸出,可使用遞歸:
void print_reverse(LinkList h) {
if (h == NULL) return;
print_reverse(h->next);
printf("%d ", h->data);
}
或使用棧存儲節點指針再彈出打印。