LeetCode 141. Linked List Cycle(环形链表) -- c语言

141. Linked List Cycle

Given a linked list, determine if it has a cycle in it.

To represent a cycle in the given linked list, we use an integer pos which represents the position (0-indexed) in the linked list where tail connects to. If pos is -1, then there is no cycle in the linked list.

 

Example 1:

Input: head = [3,2,0,-4], pos = 1
Output: true
Explanation: There is a cycle in the linked list, where tail connects to the second node.

Example 2:

Input: head = [1,2], pos = 0
Output: true
Explanation: There is a cycle in the linked list, where tail connects to the first node.

Example 3:

Input: head = [1], pos = -1
Output: false
Explanation: There is no cycle in the linked list.

 

Follow up:

Can you solve it using O(1) (i.e. constant) memory?

解题思路:

利用快慢指针fast,low,快指针fast步长为2遍历链表,慢指针low步长为1遍历链表。如果链表有环,快慢指针一定会相遇。如果无环,快指针遍历到NULL。

/*
执行用时 : 12 ms, 在Linked List Cycle的C提交中击败了96.76% 的用户
内存消耗 : 8.5 MB, 在Linked List Cycle的C提交中击败了13.28% 的用户
*/

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
bool hasCycle(struct ListNode *head) {
    struct ListNode* fast=head,*low=head;
    //if(head==NULL||head->next==NULL)return false;
    
    while(fast!=NULL&&fast->next!=NULL){
        fast=fast->next->next;
        low=low->next;
        if(fast==low)return true;
    }
    return false;
}

后记:

  1. 注意循环条件(fast != NULL && fast->next != NULL)的设定,fast != NULL已经包含了low指针不为NULL
  2. 如果fast->next == NULL时,访问fast->next->next会报错。

LeetCode 142. Linked List Cycle II(环形链表II) -- c语言

链接:https://blog.csdn.net/d_benhua/article/details/90301896

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值