题目
给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
c#
思路
本题是为了判断给定的链表中是否有环,我使用的是双指针法,即一个指针跑得快一点,一个慢一点,类似数学题中的运动员绕环道赛跑,若有环,在一定时间之后就会相遇。首先,我将链表中只有一个元素或为空的直接返回false,接着定义快慢两个指针,慢指针l1=head,快指针l2=head.next;
接着利用while循环,一旦发现两指针元素相等,直接返回true,否则l1取下一位,l2取下两位,但是在此之前要先对l1.next,l2.next,l2.next,next是否为空进行判断,否则就会出现异常。
最后也没有发现环,则返回false。
/**
* 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 l1=head;
ListNode l2=head.next;
while(l1!=null&&l2!=null)
{
while(l1==l2)
{return true;}
if(l1.next==null||l2.next==null||l2.next==null)
{
return false;
}
l1=l1.next;
l2=l2.next.next;
}
return false;
}
}