乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。
思路一:使用乙個集合unordered_set來儲存已經訪問過的結點,當第一次訪問到已經被訪問過的結點時,即為環的入口結點,此方法需要額外的空間進行輔助。
**一:
/*
struct listnode
};*/
class solution else
phead = phead->next;
}return res;
}private:
unordered_setmap;
};
思路二:
採用數學分析的方法,設定快慢指標,慢指標每次前進乙個結點,快指標每次前進兩個結點,記相遇時的結點為q,則從q到環入口的距離與從頭結點到入口的距離相等,此時從頭結點和q處同時往後移動,每一移動乙個結點,則相遇處即為環的入口,此方法不需要開闢額外的儲存空間,更佳。
**二:
/*
struct listnode
};*/
class solution
if(fast == null || fast->next == null) return null; //不存在環的情況
slow = phead;
while(slow && fast)
return null;
}};
55 鍊錶中環的入口結點
題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。struct listnode class solution 兩個指標乙個fast 乙個slow同時從乙個鍊錶的頭部出發 fast一次走2步,slow一次走一步,如果該鍊錶有環,兩個指標必然在環內相遇 此時只需要把其...
55 鍊錶中環的入口結點
題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。分析 1.得出鍊錶中環內節點數n 使用快慢指標,乙個每次走一步,乙個每次走兩步。兩指標相遇,表明鍊錶中存在環,且相遇的結點一定在環中。從相遇結點出發邊移動邊計數,直至再次回到此結點,得出環中結點數n。2.用兩個指標p...
55 鍊錶中環的入口結點 python
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。思路如果slow走了l的長度那麼fast走了2l 假設從開始到入口點的長度是s,slow在環裡走的長度是d 那麼 l s d 假設環內slow沒走的長度是m,fast走的長度是n m d d s 2l 帶入得n m d d s...