// 使用指標的指標 (或引用) 修改呼叫端指標
void InitList(struct node **head) {
*head = malloc(sizeof(struct node));
(*head)->next = NULL;
(*head)->num = 0; // 頭節點不存有效資料
}
void CreateList(struct node **head, int n) {
struct node *tail = *head;
for (int i = 0; i < n; i++) {
struct node *p = malloc(sizeof(struct node));
scanf("%d", &p->num);
p->next = NULL;
tail->next = p;
tail = p;
}
}
void PrintList(struct node *head) {
struct node *cur = head->next; // 跳過頭節點
while (cur) {
printf("%d ", cur->num);
cur = cur->next;
}
printf("\n");
}
void FreeList(struct node **head) {
struct node *cur = *head;
while (cur) {
struct node *tmp = cur;
cur = cur->next;
free(tmp);
}
*head = NULL;
}
int main() {
struct node *La = NULL; // 初始化為 NULL
InitList(&La);
CreateList(&La, 5);
PrintList(La);
FreeList(&La);
return 0;
}
完整可執行程式碼已在回答中給出,包含選單迴圈、記憶體釋放、錯誤處理。