劍指Offer No 23 鍊錶中環的入口結點

2021-10-01 08:24:33 字數 841 閱讀 2538

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。

解題思路

1. 判斷是否有環

2. 判斷環內結點個數k

3. 轉換為找到鍊錶的倒數第k個結點即入口結點(先走k步,然後快慢指標一起再次相遇即入口結點)

/*

public class listnode }*/

public class solution

// 1. 判斷是否有環

listnode p = hasloop(phead);

if (p == null)

// 2. 環中結點個數

int length = 1;

listnode q = p.next;

while (p != q)

// 3. 倒數第k個結點

return getkthnodefromlast(phead, length);

}public listnode getkthnodefromlast(listnode head, int k)

listnode pre = head;

while (pre != p)

return pre;

}public listnode hasloop(listnode head)

p = p.next;

if (q.next != null) else

}return null;

}}

劍指Offer 鍊錶中環的入口節點 23

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。第一步確定鍊錶中是否包含環,怎麼確定呢?我們定義兩個指標橙和藍,橙每次走一步,藍每次走兩步,如果他倆重合了,這就說明鍊錶中存在環。第二步求環的長度,兩者碰頭後,讓其中乙個繼續走,每走一步步數加一,然後求得環的長度。第三步求環的...

劍指Offer No 24 反轉鍊錶

輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。建立乙個新的頭節點,將原鍊錶的所有結點通過頭插法插入新的頭節點之後。最終返回新的頭節點的next即為所求結果。public class listnode public class solution listnode newhead new listnode...

劍指offer23 鍊錶中環的入口節點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。兩個指標,p1,p2 p1一次走一步,p2一次走兩步。第一次相遇之後開始計數,第二次再相遇時count的值就是環有多少個節點。兩個指標,p1,p2 p1先走count步,然後兩個再同時走,相遇的點就是入口節點。struct l...