#define _crt_secure_no_deprecate
#include #include #include#include #define ok 1
#define error 0
#define true 1
#define false 0
typedef int status;//函式結果狀態**,如ok。
typedef int elemtype;
typedef struct node
node, *linklist;
//初始化帶頭結點的空鍊錶
status initlist(linklist *l)
(*l)->next = null;//指標域為空
return ok;
}//返回l中元素個數
int listlength(linklist l)
return i;
}//頭插法建立有頭結點的單鏈表
void createlisthhead(linklist *l, int n)
}//尾插法建立有頭結點的單鏈表
void createlisttail(linklist *l, int n)
r->next = (*l)->next->next;
}//比較步數的方法
int hasloop1(linklist l)
//在相同結點,步數不同,代表有環
else
}cur2 = cur2->next;//沒有發現環,繼續下乙個結點
pos2++;
}cur1 = cur1->next;//cur1向後乙個節點
pos1++;
}return 0;
}//利用快慢指標法
int hasloop2(linklist l)
printf("p:%d,q:%d \n", p->data, q->data);
if (p == q)
}return 0;
}int main()
else
printf("方法二:\n\n");
if (hasloop2(l))
else
printf("\n\n");
break;
case'0':
exit(0);}}
}
判斷單鏈表中是否有環
單鏈表中的迴圈鍊錶尾結點不一定指向頭結點,也可以指向任意中間結點。此時若想判斷單鏈表中是否有環,就不能只是簡單的根據尾結點的next是不是頭結點來判斷,在此我提供三種方法 方法一 建立兩個指標p和q,其中p用來遍歷指標,每次只走一步,並記錄從根節點出發所走的步數,而q則是每次從根節點出發,到達p此時...
判斷單鏈表是否有環
1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如果找到環的入口點?解答 一 判斷鍊錶是否存在環,辦法為 設定兩個指標 fast,slow 初始值都指向頭,slow每次前進一步,fast每次前進二步,如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。當然,fas...
判斷單鏈表是否有環
鍊錶結構 struct list 1 判斷單鏈表是否有環 採用追趕法,設定兩個指標p和q,從煉表表頭開始,p每一步走兩個節點,q每一步走乙個節點,如果鍊錶有環則p和q必相遇。如下 判斷鍊錶是否有環,時間複雜度o n 空間複雜度o 1 list hasloopinlist list head else...