LintCode(102) 带环链表

原创 2016年05月31日 20:46:41

题目

给定一个链表,判断它是否有环。

样例

给出 -21->10->4->5, tail connects to node index 1,返回 true

分析

判断链表有无环的问题,很经典,也是面试中常见的问题。
快慢指针解决。

Python代码

"""
Definition of ListNode
class ListNode(object):

    def __init__(self, val, next=None):
        self.val = val
        self.next = next
"""
class Solution:
    """
    @param head: The first node of the linked list.
    @return: True if it has a cycle, or false
    """
    def hasCycle(self, head):
        # write your code here
        if head == None or head.next == None:
            return False
        
        slow = head
        fast = head
        while fast != None and fast.next != None:
            slow = slow.next
            fast = fast.next.next
            if slow == fast:
                return True
                
        return False

C++代码

/**
102 带环链表

给定一个链表,判断它是否有环。

您在真实的面试中是否遇到过这个题? Yes
样例
给出 -21->10->4->5, tail connects to node index 1,返回 true
*/

/**
 * Definition of ListNode
 * class ListNode {
 * public:
 *     int val;
 *     ListNode *next;
 *     ListNode(int val) {
 *         this->val = val;
 *         this->next = NULL;
 *     }
 * }
 */
class Solution {
public:
    /**
     * @param head: The first node of linked list.
     * @return: True if it has a cycle, or false
     */
    bool hasCycle(ListNode *head) {
        // write your code here
        if(head == NULL || head->next == NULL)
        {
            return false;
        }//if
        
        ListNode *slow = head, *fast = head;
        while(fast != NULL && fast->next != NULL)
        {
            fast = fast->next->next;
            slow = slow->next;
            if(slow == fast)
            {
                return true;
            }//if
        }//while

        return false;

    }
};



GitHub -- C++代码

版权声明:本文为博主原创文章,未经博主允许不得转载。

LintCode(103)带环链表 II

题目 给定一个链表,如果链表中存在环,则返回到链表中环的起始节点的值,如果没有环,返回null。 您在真实的面试中是否遇到过这个题?  Yes 样例 ...
  • fly_yr
  • fly_yr
  • 2016年05月31日 21:08
  • 3501

*[Lintcode]带环链表 II

给定一个链表,如果链表中存在环,则返回到链表中环的起始节点的值,如果没有环,返回null。 样例 给出 -21->10->4->5, tail connects to node index 1,返回...

每日一题——带环链表

判断链表是否带环。 若带环求环的长度。 若带环求环的入口处。并计算上述问题的时间复杂度求环的入口处(前面几行代码证明带环) 至于环的长度,从之前的推论可知,链表起始到环的入口的距离等于相遇点走到环...
  • Pg_dog
  • Pg_dog
  • 2017年07月18日 23:55
  • 96

如何找到带环链表的入口节点?

2种思路: 首先我们假设有个带环链表list1,如图我们可以这么做: 这样问题就转换成了如何求出2个不带环链表的相交节点很明显你会问如何在环中找到一个节点,你不可能去遍历(会死循环),有这样一...

求带环链表的入口的多种解法

方法1: 公式推导:定义两个指针,一个快指针,一个慢指针。两个指针一起走,快指针每次走两步,慢指针每次走一步(相当于速度不一样)。如果有环,那么它们就一定会相遇,当他们相遇时,走的步数是一样的(相当于...

103.Linked List Cycle II-带环链表 II(难题)

带环链表 II 题目给定一个链表,如果链表中存在环,则返回到链表中环的起始节点的值,如果没有环,返回null。 样例给出 -21->10->4->5, tail connects to node i...

带环链表得几个问题

1、判断一个链表是否有环,如果有环,则返回入环的第一个节点,否则返回null 如果一个链表有环,遍历一个链表便永远不会到达null,否则必定会到达null。设置两个指针,刚开始都指向头节点,遍历时,...

单链表面试题~带环链表的入口点

昨天做了一个小总结,发现单链表这块关于带环链表漏掉了,今天就来总结一下。要寻找一个单链表的环的入口点,首先得判断一个链表是否带环,那么又怎样判断一个单链表是否带环呢?首先我们得普及一下环有什么特性,我...

【算法】2013创新工场校园招聘笔试题--如何求出带环链表的入口节点

参考文章: http://blog.163.com/song_0803/blog/static/4609759720120910373784/ 因而,可以在链表头,相遇点分别设定一个指针,每次...

带环链表的处理

先给出几个要用的函数。1.Begin():Node* Begin(pNode pHead) { return pHead; }2.End():Node* End(pNode pHead) { ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LintCode(102) 带环链表
举报原因:
原因补充:

(最多只允许输入30个字)