环形链表

1.LeetCode原题地址

141. 环形链表 - 力扣(LeetCode)

2.解法思路一:采用快慢指针的方式,这道题之前和老师交流过,所以很快就解出来了,具体思路如如下

  • 首先还是要判空一下,小于俩个节点直接返回false
  • 定义快指针节点prev,慢指针节点cur,这里需要注意的是,快指针初始定义并不是head,因为在后续结束条件判断中,如果prev == cur == head 节点,那么循环直接结束了
  • 快指针prev走俩步,慢指针走一步,如果存在循环,那么prev在某一时刻必定会和cur重合,结束循环
  • 需要注意的是,需要加上一个判空条件来保证退出循环
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public bool HasCycle(ListNode head) {
        if(head == null || head.next == null)     
            return false;   
        ListNode prev = head.next;
        ListNode cur = head;
        while(prev != cur){
            if(prev == null || prev.next == null)
                return false;   
            prev = prev.next.next;
            cur = cur.next;
        } 

        return true;

    }
}