環形單鏈表約瑟夫問題

2021-09-22 07:50:19 字數 902 閱讀 9264

乙個環形單鏈表,從頭結點開始向後,指標每移動乙個結點,就計數加1,當數到第m個節點時,就把該結點刪除,然後繼續從下乙個節點開始從1計數,迴圈往復,直到環形單鏈表中只剩下了乙個結點,返回該結點。

思路:當鍊表為空或者鍊錶只有乙個節點或者m<1時,不做處理,直接返回原鍊錶即可。

if (head==null||head.next==head||m<1)
否則:1:首先遍歷整個鍊錶,得到鍊錶的最後乙個節點 last , 此時 last.next=head

node last=head;

while (last.next!=head)

2:通過兩個指標(last,head)的迴圈操作,刪除遍歷到的第m個節點即可。             

int count=0;

while (head.next!=head)

else

head=last.next;

}return head;

整個**:

public class node

}public node josephuskill(node head,int m)

//首先找到單鏈表的最後乙個節點last,此時last.next=head

node last=head;

while (last.next!=head)

//迴圈刪除第m個節點,直到只剩下乙個節點為止,此時這個節點的next=他自己

int count=0;

while (head.next!=head)

else

head=last.next;

} return head;

}

環形單鏈表的約瑟夫問題

輸入 乙個環形單鏈表的頭結點head和報數的值m。返回 最後生存下來的節點,且這個節點自己組成環形單向鍊錶,其他節點都刪掉。高階 如果鍊錶節點數為n,想在時間複雜度o n 時完成原問題的要求,該如何實現?public class josephuskill1 public node josephusk...

環形單鏈表的約瑟夫問題

題目 約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌只剩乙個人。解題思路 1 如果鍊錶為空,或者鍊錶節點數為1,retu...

環形單鏈表的約瑟夫問題

據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...