环形链表
整理思路:这个解法还是很普遍的,就是挨个遍历。直到快的追上慢的。但是有个问题如下:
while(fast.next!=null&&fast.next.next!=null){ //?调换两个条件的位置,结果不一样
fast=fast.next.next;
slow=slow.next;
if(fast==slow)return true;
}
正确代码:
public class num_18 {
public static class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(2);
ListNode node4 = new ListNode(1);
ListNode node5 = new ListNode(4);
ListNode node6 = new ListNode(5);
ListNode node7 = new ListNode(1);
ListNode node8 = new ListNode(9);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = node6;
node6.next = node7;
node7.next = node8;
System.out.println(hasCycle(node1));
}
public static boolean hasCycle(ListNode head) {
if(head==null||head.next==null)
return false;
ListNode fast = head,slow = head;
while(fast.next!=null&&fast.next.next!=null) {
fast = fast.next.next;
slow = slow.next;
if(fast==slow)
return true;
}
return false;
}
}