思路:就是因為有環,所以是沒有尾節點,也就是 node.next 永遠都是有值的。可以通過兩個前進速度不同的節點去迴圈,如果有相遇的時刻說明有環。
private
class
node
public
node
(object data)
}
private node createlink()
// node tem = head;
// while (tem.next != null)
// 新增環
cur.next = head.next.next.next;
// node tem1 = head;
// while (tem1.next != null)
return head;
}
private node isloop
(node head)
node slow = head.next;
node fast = head.next;
while
(fast != null && fast.next != null)
}return null;
}
private node isloopforhashmap
(node head)
hashset.
add(tem);}
return null;
}
public node findloopnode
(node head, node meetnode)
return first;
}
@test
public
void
testlink()
else
node meetnode =
findloopnode
(head, node)
; system.out.
println
(meetnode.data)
;}
判斷單鏈表是否有環
1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如果找到環的入口點?解答 一 判斷鍊錶是否存在環,辦法為 設定兩個指標 fast,slow 初始值都指向頭,slow每次前進一步,fast每次前進二步,如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。當然,fas...
判斷單鏈表是否有環
鍊錶結構 struct list 1 判斷單鏈表是否有環 採用追趕法,設定兩個指標p和q,從煉表表頭開始,p每一步走兩個節點,q每一步走乙個節點,如果鍊錶有環則p和q必相遇。如下 判斷鍊錶是否有環,時間複雜度o n 空間複雜度o 1 list hasloopinlist list head else...
判斷單鏈表是否有環
1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如果找到環的入口點?解答 一 判斷鍊錶是否存在環,辦法為 設定兩個指標 fast,slow 初始值都指向頭,slow每次前進一步,fast每次前進二步,如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。當然,fas...