判断链表是否存在环的算法(Java实现)

62 篇文章 ¥59.90 ¥99.00
本文介绍了一种在Java中判断链表是否存在环的算法。通过使用两个指针,慢指针每次移动一步,快指针每次移动两步。如果链表有环,快指针会追上慢指针;若无环,快指针会到达链表尾部。通过测试用例验证了算法的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表是一种常见的数据结构,由节点组成,每个节点包含一个数据元素和指向下一个节点的指针。在某些情况下,链表可能会形成一个循环,即链表中的一个节点的指针指向链表中的前面节点,导致链表成环。本文将介绍一种在Java中判断链表是否存在环的算法,并提供相应的源代码。

以下是判断链表是否存在环的算法的Java实现:

public class LinkedListCycle {
   

  // 定义链表节点类
  public static class ListNode {
   
    int val;
可以使用快慢指针的方式来判断链表是否。具体实现如下: ```Objective-C // 链表的节点 @interface ListNode : NSObject @property (nonatomic, strong) id value; @property (nonatomic, strong) ListNode *next; @end @implementation ListNode @end // 判断链表是否 BOOL hasCycle(ListNode *head) { if (head == nil || head.next == nil) { return NO; } ListNode *slow = head; ListNode *fast = head.next; while (slow != fast) { if (fast == nil || fast.next == nil) { return NO; } slow = slow.next; fast = fast.next.next; } return YES; } ``` 以上代码中,我们使用两个指针slow和fast,开始时它们都指向链表的头节点。slow每次移动一步,fast每次移动两步。如果链表存在,则快指针会追上慢指针,并且两个指针会相遇。如果链表中不存在,则快指针会先到达链表的末尾,此时可以判断链表没有。 使用示例: ```Objective-C ListNode *node1 = [[ListNode alloc] init]; node1.value = @(1); ListNode *node2 = [[ListNode alloc] init]; node2.value = @(2); ListNode *node3 = [[ListNode alloc] init]; node3.value = @(3); ListNode *node4 = [[ListNode alloc] init]; node4.value = @(4); [node1 setNext:node2]; [node2 setNext:node3]; [node3 setNext:node4]; // Uncomment the below line to create a cycle //[node4 setNext:node2]; BOOL hasCycleResult = hasCycle(node1); NSLog(@"链表是否:%d", hasCycleResult); ``` 在上面的示例中,我们创建了一个包含4个节点的链表,并且没有。通过调用`hasCycle`方法判断链表是否,最后输出结果为`NO`。 如果你想测试有的情况,可以取消注释代码中的一行,将第四个节点的下一个节点指向第二个节点,然后再次运行程序,输出结果将为`YES`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值