資料結構 判斷鍊錶中是否有環

2021-09-25 17:32:22 字數 1466 閱讀 9299

一、判斷鍊錶中是否有環

#include "stdio.h"

#define ok 1

#define error 0

#define true 1

#define false 0

typedef int status;

typedef int elemtype;

typedef struct node

node, *linklist;

/**********************

初始化乙個鍊錶

**********************/

status initlist(linklist *l)

/*****************************

獲取鍊錶長度

******************************/

int listlength(linklist l)

return i;

}/***********************

採用尾插法建立單鏈表

*************************/

void createlisthead(linklist *l, int n)

}/**************************

採用尾插法建立迴圈單鏈表

**************************/

void createlisttail(linklist *l, int n)

r->next = (*l)->next->next;}

/*******************

雙游標判斷是否有環

********************/

int hasloop1(linklist l)

}cur2 = cur2->next; //

pos2++; //

} cur1 = cur1->next; //

pos1++; //

} return 0;

}/********************

快慢指標判斷是否有環

*********************/

int hasloop2(linklist l)

return 0;

}int main()

else

printf("\n\n");

if(hasloop2(l))

else

printf("\n");

break;

case '0':

exit(0);

} }}

二、問題

資料結構 判斷給定的鍊錶中是否有環

判斷給定的鍊錶中是否有環。如果有環則返回true,否則返回false。你能給出空間複雜度o 1 的解法麼?由於這裡的鍊錶會存在環,所以單純的判定尾節點的next是否為null,是不行的,會進入死迴圈,這時我們可以用乙個快慢指標來解決問題,快的指標每次走兩步,慢的指標每次走一步,為了更好的判定迴圈,因...

判斷鍊錶中是否有環

單向鍊錶中有環的話,如果我們對此鍊錶進行遍歷,則將無窮盡。因此有必要判斷乙個單向鍊錶是否有環。假如乙個單向鍊錶中存在環,如下圖 乙個小矩形代表鍊錶中的乙個節點 虛線箭頭代表中間有無數節點。先說演算法,然後再來證明演算法的正確性。鍊錶的頭指標為h if null h null h next 頭指標為空...

資料結構 PHP 鍊錶的翻轉 判斷鍊錶是否有環

2.判斷鍊錶是否有環 這篇檔案主要通過學習鍊錶的翻轉和判斷鍊錶是否有環這兩個簡單的例子加深對鍊錶這種資料結構的理解。1.1 鍊錶翻轉原理圖 1.2 鍊錶翻轉 require linkedlist.php linkedlist new linkedlist for i 1 i 20 i echo li...