提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
先从链表开始入手
1.环形链表(原题链接在下)力扣分析题目:首先题目任务是判断是否出现环形区域;
思路是使用双指针,同时从头结点出发,慢的一次走一步,快的一次走两步,如果没有环,快的会提前到达链表尾部;如果有环,快的会一直绕圈,肯定会在某时刻和慢的汇合
代码如下:
/**
* 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;
}
if(head.next == null){
return false;
}
ListNode a = head;
ListNode b = head;
while(b != null && b.next != null){ //这一步在二刷时候出错,因为跳两步可能会出现空指针异常,所以要先确认本位和next均非空才能跳
a = a.next;
b = b.next.next;
if(a == b){
break;
}
}
if(a == b){
return true;
}
return false;
}
}
本文介绍了一种使用双指针技术来判断链表是否存在环的方法。通过一个快指针和一个慢指针,快指针每次移动两步,慢指针每次移动一步,如果两者相遇则说明链表存在环。
515

被折叠的 条评论
为什么被折叠?



