接續上一篇創建的鏈表,編寫遍歷打印函數。利用全局變量 n 記錄節點數。
void print(struct student *head) {
struct student *p;
printf("\n these %d records are:\n", n);
p = head;
if (head != NULL) {
do {
printf("%ld %f\n", p->num, p->score);
p = p->next;
} while (p != NULL);
}
}
p = head:工作指針從頭節點開始。do-while 循環:保證至少執行一次(頭節點非空時),先打印再移動指針。p = p->next:移動到下一節點。p != NULL:遇到尾節點的 NULL 結束。const:void print(const struct student *head),防止誤修改。while 替代 do-while:邏輯更清晰,避免空指針解引用風險。%.2f 限制小數位,對齊列寬。void print(const struct student *head) {
const struct student *p = head;
int count = 0;
printf("\nRecords:\n");
while (p) {
printf("%4ld %8.2f\n", p->num, p->score);
p = p->next;
count++;
}
printf("Total: %d nodes\n", count);
}
鏈表遍歷是基礎操作,核心是工作指針從頭節點出發,沿 next 逐個訪問直到 NULL。掌握此模式,插入、刪除、查找等進階操作皆為此基礎上的變體。