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

  • 相关阅读:
    表值参数学习
    js闭包
    vue相关
    js的面向对象
    JavaScript中template模板引擎
    使用原生的ajax的步骤(五个步骤)
    (a ==1 && a== 2 && a==3) 有可能是 true 吗?
    这道JS笔试题你做对了吗?
    JS事件分类
    JS事件绑定模型
  • 原文地址:https://www.cnblogs.com/qiaogeli/p/9931938.html
Copyright © 2020-2023  润新知