[面試經典程式設計題] 1 判斷連結串列有環與否
阿新 • • 發佈:2020-07-13
題目:判斷連結串列是否有環
題目描述
示例
進階:
你能用 O(1)(即,常量)記憶體解決此問題嗎?
Java程式碼
方法1:快慢指標
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public boolean hasCycle(ListNode head) { //判斷只有一個節點的情況 if(head==null || head.next==null){return false;} //不是一個節點或者為空的時候,就執行快慢指標 ListNode slow = head; ListNode quick = head.next; //if(head.next==head) {return true;} while(slow != quick){ if(quick==null || quick.next==null) {return false;} slow = slow.next; quick = quick.next.next; } //退出while迴圈,即有環 return true; } }
方法2:雜湊表
//方法2 雜湊表 public boolean hasCycle(ListNode head) { //判斷只有一個節點回或者無頭節點的話即無環 if(head==null || head.next==null) {return false;} //雜湊表 Set<ListNode> set = new HashSet<ListNode>(); while(head!=null){ if(set.contains(head)){ return true; }else{ set.add(head); } head = head.next; } return false; } }