141. 环形链表

题目:

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

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

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

示例:

image.png

image.png

思路:

双指针
一个指针index1指向第一个元素,一个指针index2指向第二个元素;让index1每次向后移动一个位置,index2每次向后移动两个位置,只要链表是环形,那么这两个指针总会相等。

代码:

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
        if (head == null) return false;
        ListNode index1 = head;
        ListNode index2 = head.next;
        while (index2 != null && index1 != null && index2.next != null) {
            if (index1 != index2) {
                index1 = index1.next;
                index2 = index2.next.next;
            } else {
                return true;
            }
            
        }

        /*判断只要不相等就一直移动
        while (index1 != index2) {
            //只要某一个指针为空,即到了终点,还不相等,就返回false
            if (index1 == null || index2 == null) {
                return false;
            } else {
            //不为空就移动
                index1 = index1.next;//移动一个位置
                index2 = index2.next.next;//移动两个位置
            }
        }
        return true;
        */
        return false;
    }
}

时间复杂度:O(n),空间复杂度:O(1)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容