leetcode C語言版 第142. 環形連結串列 II
阿新 • • 發佈:2018-12-30
給定一個連結串列,返回連結串列開始入環的第一個節點。 如果連結串列無環,則返回 null
。
說明:不允許修改給定的連結串列。
進階:
你是否可以不用額外空間解決此題?
分析:
我最開始想的是通過修改value值來判斷是否相遇,後來看見題目規定不能修改,遂涼涼。
用快慢指標解答,至於為什麼能夠相遇,我也沒仔細看,詳情見部落格點選開啟連結,他是用的java,本人用的C。
宣告:
程式碼難免有不足之處,持續更新ing
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode *detectCycle(struct ListNode *head) { if(head == NULL) return NULL; struct ListNode *fast = head; struct ListNode *slow = head; //判斷有沒有環 while(true){ //fast移動兩步 if(fast->next != NULL) fast = fast->next; else return NULL; if(fast->next != NULL) fast = fast->next; else return NULL; //slow移動一步 slow = slow->next; //判斷相遇 if(slow == fast){ //相遇了就把fast移動到最開始 fast = head; //退出迴圈 break; } } //判斷相遇節點 while(true){ if(fast == slow){ return fast; } fast = fast->next; slow = slow->next; } }