算法6.环形链表

叶子创业记

共 1513字,需浏览 4分钟

 · 2021-10-18

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



给定一个链表,判断链表中是否有环。


b6468a3c07f541b5f05c8e49ab77f01f.webp



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



924164b63788de1248eb87d18745d4ed.webp



代码如下:


/** * @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; }}


浏览 25
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报