判斷一個較大的單鏈表是否有環及求環的進入點

來源:互聯網
上載者:User
/*判斷單鏈表中是否有環*/struct ListType{int data;struct ListType *next;};typedef struct ListType *list;int IsLoop(list s){//雙指標法list fast = s;list slow = s;if(fast == NULL)return -1;while(fast && fast->next){fast = fast->next->next;slow = slow->next;if(fast == slow)return 1;}return !(fast == NULL) || (fast->next == NULL);}#include<map>using std::map;typedef struct node{int data;struct node *next;}node;map<node*,int>m;bool IsLoop(node *head){//hash表法if(!head){return false;}node *p = head;while(p){if(m[p] == 0)       //預設都是0{m[p] = 1;}else if(m[p] == 1)return true;p = p->next;}}list *FindLoopPort(list *head){//尋找進入點list *slow = head,*fast = head;while(fast && fast->next){//尋找相遇點slow = slow->next;fast = fast->next->next;if(slow == fast)break;}if(fast == NULL || fast->next == NULL)return NULL;slow = head;while(slow != fast){//slow指標從起點開始走,fast指標從相遇點開始走,倆指標相遇處即為環的進入點slow = slow->next;fast = fast->next;}return slow;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.