資料結構與演算法之鍊錶(四) 約瑟夫環

2021-06-08 11:44:30 字數 1407 閱讀 3785

在一些大的公司尤其是大的網際網路公司面試的時候,鍊錶的一些趣味演算法是經常出現。

下面就來是兩個常見的面試題:

1.判斷乙個單鏈表是不是存在環。

#includeusing namespace std;

struct node

;//建立單鏈錶鏈表

node *create_list(int n)

node *head = null;

node *p = new node;

if(p == null)

head = p;

while(--n)

p->next = q;

p = q;

} p->next = null;

return head;

}//建立迴圈單鏈錶鏈表

node *create_loop_list(int n)

node *head = null;

node *p = new node;

if(p == null)

head = p;

while(--n)

p->next = q;

p = q;

} p->next = head;

return head;

}bool has_roll(const node* head)

if(p == q)

else }

int main()

;//建立迴圈單鏈錶鏈表

node *create_loop_list(int n)

node *head = null;

node *p = new node;

if(p == null)

head = p;

int i = 1;

p->num = i;

while(--n)

p->next = q;

p = q;

} p->next = head;

return head;

}//刪除從頭結點起的第m個結點

node *delete_node(node* head, int m)

t->next = p->next;

head = t->next;

delete p;

return head;

}node *last_one(int n, int k, int m)

while(head != head->next)

return head; }

int main()

{ int n = 0;

int k = 0;

int m = 0;

cin>>n>>k>>m;

node *last = last_one(n, k, m);

cout

資料結構系列之鍊錶 迴圈鍊錶(約瑟夫環)

已知n個人,編號1到n,圍坐在一張圓桌周圍,從k開始報數,數到m的人出列,下乙個人又從k開始報數,到m出列,直至全出列。步驟 1.建立乙個有n個鏈節點無頭節點的迴圈鍊錶 2.確定第乙個報數人位置 3.不斷從鏈中刪除節點至鍊錶為空 n為總人數,k為第乙個報數人,m為出列者喊的數 linklist p,...

資料結構 迴圈鍊錶,約瑟夫環

一 迴圈鍊錶 include stdio.h include stdlib.h typedef struct node node 初始化迴圈鍊錶 void ds init node pnode 初始化迴圈鍊錶,pnode 鍊錶上 else 返回結點所在位置 int ds search node pn...

資料結構與演算法(4 約瑟夫環問題到迴圈鍊錶)

那麼如何構建環以及如何進行刪除操作是最重要的了!構建之前,我們要有乙個已經存在的tail,有無資料不重要,首先是構建的問題 實現乙個插入操作 void addelements int value else 構建完約瑟夫之後,接下來是乙個刪除操作 index表示需要輸入的數 void delete i...