約瑟夫環
以五個節點的帶環單鏈表(最後乙個節點指向第乙個節點)為例子
1 從煉表頭開始,先刪除第二個節點
2 從刪除節點的下乙個節點開始,再往後找第二個節點,然後刪除。
3 一直重複過程2,直到剩下乙個節點,返回該節點。
listnode* joecircle(listnode** phead, int m)
if (*phead ==
null)
listnode* cur =
*phead;
while (cur->next !=
null)
//列印第m個點
printf("%c\n", cur->
data);
//把第m+1個資料壓入m中相當於對第m個點的刪除
listnode* to_delete = cur->next;
cur->
data
= to_delete->
data;
//使m指向m+2個 節點
cur->next = to_delete->next;
//刪除m+1個節點
listdestroy(to_delete);
//此時cur相當於指向實際刪除節點的下乙個節點 第m+1個節點
//然後再從cur開始查詢第m個節點對其進行刪除
}return cur;
}
單鏈表實現約瑟夫環
語塞夫環問題 問題來歷 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再...
單鏈表實現約瑟夫環
約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍。從第乙個人開始報數,數到k的那個人出列 他的下乙個人又從1開始報數,數到k的那個人又出列 依此規律重複下去,直到圓桌只剩下乙個人。那麼如何用單鏈表來實現約瑟夫環呢,首先我們需要構建乙個帶環鍊錶,定義乙個指標c...
單鏈表實現約瑟夫環
首先先了解一下什麼是約瑟夫環問題 據說著名猶太歷史學家josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺...