链表相关-环形链表
环形链表
1.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;
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 雪夜の自我救赎!
评论
ValineDisqus