提供的反轉函式 Reverse() 存在邏輯缺陷:
c!='\n' 不穩定,建議改用 sentinel 值LinkList Reverse(LinkList head) {
LinkList prev = NULL;
LinkList curr = head->next;
LinkList next = NULL;
while (curr != NULL) {
next = curr->next; // 保存下一節點
curr->next = prev; // 反轉指標
prev = curr; // 移動 prev
curr = next; // 移動 curr
}
head->next = prev; // 更新頭節點
return head;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int node;
struct LNode *next;
} LNode, *LinkList;
LinkList Head_Node() {
LinkList head = (LinkList)malloc(sizeof(LNode));
if (!head) { printf("記憶體配置失敗\n"); return NULL; }
head->next = NULL;
return head;
}
int CreateList(LinkList head) {
int data; LinkList p, q = head;
printf("請輸入資料(-1 結束):");
while (scanf("%d", &data) == 1 && data != -1) {
p = (LinkList)malloc(sizeof(LNode));
if (!p) return -1;
p->node = data; p->next = NULL;
q->next = p; q = p;
}
return 0;
}
void Output(LinkList head) {
LinkList p = head->next;
while (p) { printf("%d ", p->node); p = p->next; }
printf("\n");
}
int main() {
LinkList head = Head_Node();
CreateList(head);
printf("原始鏈表:"); Output(head);
Reverse(head);
printf("反轉後:"); Output(head);
return 0;
}