leetcode-141-环形链表(java|python)


title: leetcode-141-环形链表(java|python)
date: 2019-09-26 19:21:35
categories:

  • leetcode
    tags:
  • leetcode

环形链表

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

    为了表示给定链表中的环,我们使用整数 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
    解释:链表中没有环。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/linked-list-cycle
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

java

  • hashMap法,每个元素只出现一次,如果发现有重复就是有环,反之就是没有

    public class Solution {
           
        public boolean hasCycle(ListNode head) {
           
            HashSet<ListNode> set = new HashSet<ListNode>();
            while(head!=null){
           
                if(set.contains(head))
                    return true;
                else 
                    set.add(head);
                head = head.next;
            }
            return false;
        }
    }
    
  • 快慢指针法:一个指针速度快一个指针速度慢,如果有环一定会打转,从而达到目标,没有环就会遍历结束

    public class Solution {
           
        public boolean hasCycle(ListNode head) {
           
            if (head == null)
                return false;
            ListNode fast = head;
            ListNode slow = head;
            while (fast != null && fast.next != null) {
           
                slow = slow.next;
                fast = fast.next.next;
                if (fast == slow)
                    return true;
            }
            return false;
        }
    }
    

python3(解法原理同上所述)

  • 同一

    class Solution(object):
        def hasCycle(self, head):
            """
            :type head: ListNode
            :rtype: bool
            """
            HashSet = {
           }
            while(head!= None):
                if(HashSet.has_key(head.val)):
                    return True
                else:
                    HashSet[head.val] = 0
                    head = head.next
            return False
    
  • class Solution(object):
        def hasCycle(self, head):
            """
            :type head: ListNode
            :rtype: bool
            """
            save = set()
            cur = head 
            while cur is not None:
                if cur in save:
                    return True
                else:
                    save.add(cur)
                    cur = cur.next
            return False   
    
  • class Solution(object):
        def hasCycle(self, head):
            """
            :type head: ListNode
            :rtype: bool
            """
            if(head==None):
                return False
            fast = head
            slow = head
            while(fast!=None and fast.next!=None):
                slow = slow.next
                fast = fast.next.next
                if(fast==slow):
                    return True
                
            return False
    

你可能感兴趣的:(java,python,数据结构,python))