算法6.环形链表
这个题曾经被问到过,当我准备进行逻辑推理的时候,直接被打断了,其实算法题真的背过就好了,或者把第一印象记住,之后一旦被问到,稍微摸一下脑瓜子,然后把自己背过的东西假装很顺利地推导出来,这其实才是面试官想要的东西。
给定一个链表,判断链表中是否有环。

快慢指针解法:一般提到这个链表的算法题,快慢指针这个概念我们一定要时刻牢记,不只是在这个地方有用,曾经还有一道面试题也用过这个概念,不过我现在一时半会记不起来了。显而易见,在一个环里面,跑的快的迟早能够再遇上跑得慢的。

代码如下:
/*** @author Ted* @version 1.0* @date 2021/10/16 17:54*/public class CircleListNode {public static void main(String[] args) {CircleListNode circleListNode = new CircleListNode();ListNode head = new ListNode(8);ListNode node2 = new ListNode(3);head.next = node2;ListNode node3 = new ListNode(3);node2.next = node3;ListNode node4 = new ListNode(3);node3.next = node4;ListNode node5 = new ListNode(3);node4.next = node5;ListNode node6 = new ListNode(3);node5.next = node6;//尾指针指向node3 产生环node6.next = node3;boolean b = circleListNode.hasCycle(head);System.out.println(b);}public boolean hasCycle(ListNode head) {if (head == null || head.next == null) {return false;}ListNode slow = head;ListNode fast = head.next;while (slow != fast) {if (fast == null || fast.next == null) {return false;}slow = slow.next;fast = fast.next.next;}return true;}}class ListNode{public int val;public ListNode next;public ListNode(int val){this.val = val;}}
评论
