美文网首页
LeetCode-循环链表

LeetCode-循环链表

作者: Pei丶Code | 来源:发表于2018-08-30 11:29 被阅读11次

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

当初面试的时候,基本上都会问到这个问题

/**
 * Definition for singly-linked list.
 * struct ListNode {
 * int val;
 * struct ListNode *next;
 * };
 */

解法一: 双指针

利用快慢指针,当两个指针相等时,证明有环。

bool hasCycle(struct ListNode *head) {
    if(head==NULL || head->next == NULL){
        return false;
    }
    struct ListNode *p, *q;
    p = head;
    q = head;
    while(q!= NULL && q->next != NULL){
        p = p->next;
        q = q->next->next;
        if (p == q ){
            return true;
        }
    }
    return false;
}

解法二: 递归

bool hasCycle(struct ListNode *head) {
    if(head==NULL || head->next == NULL){
        return false;
    }
    if(head->next = head) return true;
    ListNode *q = head->next;
    head->next = head;
    bool isCycle = hasCycle(*q);
    return isCycle;
}

相关文章

  • LeetCode-循环链表

    给定一个链表,判断链表中是否有环。进阶:你能否不使用额外空间解决此题? 当初面试的时候,基本上都会问到这个问题 解...

  • LeetCode-循环链表II

    环形链表 II 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 先说明一下思路,和...

  • 数据结构与算法之循环链表(3.4)

    目录 单向循环链表双向循环链表约瑟夫问题如何发挥循环链表的最大威力? 一 单向循环链表 单向循环链表 - 只有一个...

  • 双向链表&双向循环链表

    链表分为:单链表、单向循环链表、双向链表、双向循环链表本节主要说明:双向链表、双向循环链表 定义结点 一、双向链表...

  • LeetCode-链表

    LeetCode-链表 链表(Linked List)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺...

  • 0x05双向循环链表

    1 双向循环链表创建 2 双向循环链表插入元素 3 遍历双向循环链表 4双向循环链表删除结点

  • 10.单向循环链表SingleCycleLinkList

    目录:1.单向循环链表的定义2.单向循环链表的图解3.单向循环链表定义操作4.单向循环链表的实现 1.单向循环链表...

  • 线性表-单向循环链表

    为了方便,本文介绍的单向循环链表不包含头节点 单向循环链表内容 单向循环链表的的定义 单向循环链表的创建 单向循环...

  • 数据结构基础--单向循环链表

    单向循环链表 单向循环链表是可循环的单链表,它与单链表的区别在于单向链表的最后一个元素的指针域为空,而单向循环链表...

  • 「数据结构 三」C 语言实现循环链表

    作者原创,转载请注明出处。 个人博客:renzhe.name 本文主要讲述循环链表,双向链表。 循环链表 循环链表...

网友评论

      本文标题:LeetCode-循环链表

      本文链接:https://www.haomeiwen.com/subject/vobkwftx.html