本實例與實例73代碼完全相同,演示帶頭節點的單鏈表創建(尾插法)及正序遍歷打印。
L 不存儲數據,next 指向首個數據節點。q 始終指向當前最後節點,新節點接在 q->next,再移動 q。print 從 h->next 開始遍歷,避開頭節點。// 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;
}
}
3
請輸入第1個元素的值:10
請輸入第2個元素的值:20
請輸入第3個元素的值:30
剛剛建立的各個鏈表元素的值為:
10 20 30