• 每天一道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打卡群与技术交流群,欢迎关注。

  • 相关阅读:
    3
    正确的消费理念和方式
    2
    1
    善待精力,保持体力,保持热情
    为什么不从今天开始呢?
    c++中的新成员
    函数重载分析下
    函数重载分析上
    函数参数的扩展
  • 原文地址:https://www.cnblogs.com/qiaogeli/p/9931938.html
Copyright © 2020-2023  润新知