在一些大的公司尤其是大的網際網路公司面試的時候,鍊錶的一些趣味演算法是經常出現。
下面就來是兩個常見的面試題:
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... 那麼如何構建環以及如何進行刪除操作是最重要的了!構建之前,我們要有乙個已經存在的tail,有無資料不重要,首先是構建的問題 實現乙個插入操作 void addelements int value else 構建完約瑟夫之後,接下來是乙個刪除操作 index表示需要輸入的數 void delete i...資料結構系列之鍊錶 迴圈鍊錶(約瑟夫環)
資料結構 迴圈鍊錶,約瑟夫環
資料結構與演算法(4 約瑟夫環問題到迴圈鍊錶)