zoukankan      html  css  js  c++  java
  • 102. 带环链表

    102. 带环链表

    中文English

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

    样例

    ```
    样例 1:
    	输入: 21->10->4->5,  then tail connects to node index 1(value 10).
    	输出: true
    	
    样例 2:
    	输入: 21->10->4->5->null
    	输出: false
    
    ```
    

    挑战

    不要使用额外的空间

    输入测试数据 (每行一个参数)如何理解测试数据?

    快慢指针解法:

    如果是带环的,快慢指针最终会相等,则直接返回True,否则False,走到Null

    """
    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 linked list.
        @return: True if it has a cycle, or false
        """
        def hasCycle(self, head):
            # write your code here
            #快慢指针,如果最终相等,则是带环
            if not head: return False 
            
            slowPtr,fastPtr = head, head
            #如果fasePtr有值的话,那么slowPtr一定也有值,所以如果要判断fastPtr.next.next是否有值,fastPtr.next必须需要先判断
            while fastPtr.next and fastPtr.next.next:
                slowPtr = slowPtr.next
                fastPtr = fastPtr.next.next
                
                #如果最终相等
                if slowPtr == fastPtr:
                    return True
            
            return False 
            
            

    set()解法,存储当前节点的地址,id(head),如果是已经访问过,则返回True

    """
    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 linked list.
        @return: True if it has a cycle, or false
        """
        def hasCycle(self, head):
            # write your code here
            #set存储,访问过的节点id(head),如果已经访问过,则返回True,否则False,根据head的地址来进行存储
            
            if not head: return False
            
            array = set()
            while head:
                if (id(head) in array):
                    return True 
                else:
                    array.add(id(head))
                head = head.next
            
            return False  
            
  • 相关阅读:
    同步请求和异步请求的区别
    Ajax初步理解
    ajax的GET和POST请求
    What's this?(js)
    rxjs
    Angular7_获取异步方法里面的数据
    Angular7_人员登记系统
    Angular7
    特殊操作符
    Oracle 表操作
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13461862.html
Copyright © 2011-2022 走看看