Leecode刷题之旅-C语言/python-141环形链表
Posted 李逍遥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leecode刷题之旅-C语言/python-141环形链表相关的知识,希望对你有一定的参考价值。
/* * @lc app=leetcode.cn id=141 lang=c * * [141] 环形链表 * * https://leetcode-cn.com/problems/linked-list-cycle/description/ * * algorithms * Easy (35.53%) * Total Accepted: 28.4K * Total Submissions: 79.4K * Testcase Example: ‘[3,2,0,-4] 1‘ * * 给定一个链表,判断链表中是否有环。 * * 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 * * * * 示例 1: * * 输入:head = [3,2,0,-4], pos = 1 * 输出:true * 解释:链表中有一个环,其尾部连接到第二个节点。 * * * * * 示例 2: * * 输入:head = [1,2], pos = 0 * 输出:true * 解释:链表中有一个环,其尾部连接到第一个节点。 * * * * * 示例 3: * * 输入:head = [1], pos = -1 * 输出:false * 解释:链表中没有环。 * * * * * * * 进阶: * * 你能用 O(1)(即,常量)内存解决此问题吗? * */ /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ bool hasCycle(struct ListNode *head) { struct ListNode *p = head,*q = head; if(p == NULL) return false; else { while(1) { if(p->next == NULL||p->next->next == NULL) return false; q = q->next; p = p->next->next; if(p == q) return true; } } }
题目很好理解。思路也很明确,这里判断结点的下一个和节点的下一个的下一个是否能循环连接起来,就可以判断是否是环形链表。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
python:
class Solution(object): def hasCycle(self, head): """ :type head: ListNode :rtype: bool """ fast = slow = head while fast and fast.next: fast = fast.next.next slow = slow.next if slow == fast: return True return False
以上是关于Leecode刷题之旅-C语言/python-141环形链表的主要内容,如果未能解决你的问题,请参考以下文章
Leecode刷题之旅-C语言/python-118杨辉三角
Leecode刷题之旅-C语言/python-141环形链表
Leecode刷题之旅-C语言/python-121买卖股票的最佳时机
Leecode刷题之旅-C语言/python-26.删除数组中的重复项