題目:乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。
這道題借助於前面的鍊錶的倒數第k個節點的思想,考慮快慢指標。考慮當知道了鍊錶的環中所含的節點數目,用乙個快指標先走這麼多個節點,再用慢指標,兩個同時走,此時他們相遇的第乙個節點就是鍊錶的入口節點。下面問題就轉換為求鍊錶環的節點數目。
考慮鍊錶是否成環,同樣用快慢指標,當他們相遇的那個節點,肯定是環內的節點,再讓它自己一步步走,等再次走到這個節點即可求到環的大小。
**如下:
struct listnode
};class solution
while(slow != fast)
return slow;
}int lengthofring(listnode* phead)
if(fast == null)
return 0;
else
return num;}}
};
這裡要注意快慢指標那對於fast和slow是否為null的判斷,否則測試段錯誤。 面試題56 鍊錶中環的入口結點
題目 乙個鍊錶中包含環,如何找出環的入口結點?首先,如果判斷乙個鍊錶有環?設定兩個指標,乙個指標一次走一步,乙個指標一次走兩步,如果鍊錶有環,那麼兩個指標一定會相遇,而且是在環內相遇。求環的入口結點 設定p1和p2兩個指標指向頭結點,如果環中有n個結點,指標p1現在鍊錶上移動n步然後兩個指標以相同的...
面試題23 鍊錶中環的入口節點
面試題23 鍊錶中環的入口節點 題目 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出 null 思路 定義快慢兩個指標,相遇後 環中相匯點 將快指標指向 phead 然後一起走,每次往後挪一位,相遇的節點即為所求。詳細分析 相遇即 p1 p2 時,p2 所經過節點數為 2x,p1 ...
面試題23 鍊錶中環的入口節點
一 判斷該鍊錶是否有環 使用雙指標,前指標走得快,後指標走得慢,如果有環,前指標能夠在後面追上慢指標 include struct listnode listnode meetingnode listnode phead return nullptr 二 找到環的入口 計算得到環的節點數 將指標1前...