int p[17] = {0};
for (int i = 0; i < 16; i++) p[i] = i + 1; // p[0..15] = 1..16, p[16]=0
int head = 0, test;
while (1) {
test = p[head]; // 記錄下一個節點值
p[head] = p[test]; // 刪除 test 節點:head 指向 test 的下一個
head = test; // 移動 head 到被刪除節點位置
if (head == 0) break; // 回到起點結束
}
初始鏈表:0→1→2→...→16→0(索引為節點,值為 next 指針)
head=0,test=p[0]=1,p[0]=p[1]=2,刪除節點 1,head=1head=1,test=p[1]=2,p[1]=p[2]=3,刪除節點 2,head=2head=16,test=p[16]=0,p[16]=p[0]=2(此時 p[0] 已變為 2),head=0 滿足退出條件p[head]=p[head] 這句確實無效(自我賦值),可能是調試殘留。p 同時充當「節點值」與「next 指針」,節省結構體開銷,屬於「靜態鏈表」技巧。用紙筆畫出前 5 步的數組狀態變化,理解「值即指針」的映射關系;嘗試修改步長實現真正的约瑟夫問題。