每天一道leetcode141-环形链表

Posted qiaogeli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天一道leetcode141-环形链表相关的知识,希望对你有一定的参考价值。

考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰

前言

2018.11.8号打卡
明天的题目:
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

题目

每天一道leetcode141-环形链表
分类:链表
中文链接:
https://leetcode-cn.com/problems/linked-list-cycle/description/
英文链接
https://leetcode.com/problems/linked-list-cycle/description/

题目详述

给定一个链表,判断链表中是否有环。
进阶:
你能否不使用额外空间解决此题?

题目详解

思路

  • 使用两个指针,一个快指针,一个慢指针;
  • 快的每次走两步,慢的每次走一步,如果有环,那么快的肯定可以追上慢点,两者相等

代码

 1/**
2 * Definition for singly-linked list.
3 * class ListNode {
4 *     int val;
5 *     ListNode next;
6 *     ListNode(int x) {
7 *         val = x;
8 *         next = null;
9 *     }
10 * }
11 */

12public class Solution {
13    public boolean hasCycle(ListNode head) {
14        if(head == null || head.next == null)
15            return false;
16        ListNode fast = head.next;
17        ListNode slow = head;
18        while(slow != null && fast != null)
19        {
20            if(fast == slow)
21                return true;
22            slow = slow.next;
23            if(fast.next != null)
24                fast = fast.next.next;
25            else
26                return false;
27        }
28        return false;
29    }
30}

代码讲解

  • 16-17行定义快慢指针
  • 20-21行如果快指针与慢指针相遇,那么说明有环;
  • 22-26行 快的走两步,慢的每次走一步

结束语

2018.11.8号打卡

作者乔戈里亲历2019秋招,哈工大计算机本硕,百度准入职java工程师,欢迎大家关注我的微信公众号:程序员乔戈里,公众号有3T编程资源,以及我和我朋友(准入职百度C++工程师)在秋招期间整理的近200M的面试必考的java与C++面经,并有每天一道leetcode打卡群与技术交流群,欢迎关注。

以上是关于每天一道leetcode141-环形链表的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode第141题—环形链表—Python实现

LeetCode 141. 环形链表

LeetCode 141 环形链表

LeetCode.链表.141+142环形链表,附详细证明过程+多图分析

leetcode 141. 环形链表

leetcode141-环形链表