判断单链表中是否存在环python3

本文探讨了LeetCode 141题——环形链表的两种解决方案:一种是利用快慢指针技巧,另一种是通过哈希表实现。详细讲解了两种方法的实现步骤,并提供了完整代码示例。适合初学者理解链表环检测问题的不同策略。
摘要由CSDN通过智能技术生成

LeetCode 141题

方法1:快慢指针法

方法2:哈希表法

完整程序

 

"""
力扣题 :141 环形链表
https://leetcode.cn/problems/linked-list-cycle/

解题思路:
1、哈希表法
2、快慢指针法
首节点附上两个指针,第一个指针每次只遍历一个节点,
第二个指针每次遍历两个节点,直到这两个指针所指的节点相同时,则说明有环。
2022.5.10

"""
class ListNode:
    def __init__(self,x):
        self.val = x
        self.next = None

class Solution:
    "判断链表是否为空"
    def isEmpty(self,header):
        if header.next is None:
            return True

    def Show(self,header): #显示链表
        cur = header
        if self.isEmpty(header):
            print('空链表')
            return
        while cur:
            if cur.next is not None:
                print(cur.val,end='->')
            else:
                print(cur.val)
            cur = cur.next

    def hasCycle(self,header):
        """
        判断链表是否有环,快慢指针法
        :param header:
        :return:
        """
        if header is None or header.next is None:
            return False
        slow = header
        fast = header.next
        while slow != fast:
            if fast is None or fast.next is None:
                return False
            slow = slow.next
            fast = fast.next.next
        return True

    def hasCycle2(self,header):#哈希表法
        seen = set()
        while header:
            if header in seen:
                return True
            seen.add(header)
            header = header.next
        return False


# 创建单链表
List = [3,2,0,-4]
header = ListNode(None)
cur = header
for i in range(0,len(List)):
    newNode = ListNode(List[i])
    cur.next = newNode
    cur = cur.next

Solution().Show(header)
# 添加一个指针 构成带环的链表
temp = header.next
pos = 1
count = 0
while count != pos:
    temp = temp.next
    count += 1
cur.next = temp


print(Solution().hasCycle(header.next))












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值