快慢指针的妙用
所属分类 algo
浏览量 910
单链表
判断链表是否有环
快速定位中间节点
public class FastAndSlowPoint {
public static void main(String[] args) throws Exception {
LinkNode node1 = new LinkNode(1);
LinkNode node2 = new LinkNode(2);
LinkNode node3 = new LinkNode(3);
node1.next = node2;
node2.next = node3;
System.out.println(middleNode(node1));
System.out.println(hasCycle(node1));
node3.next = node1;
System.out.println(hasCycle(node1));
LinkNode node4 = new LinkNode(4);
node3.next = node4;
System.out.println(middleNode(node1));
System.out.println(hasCycle(node1));
}
public static LinkNode middleNode(LinkNode head) {
if (head == null) {
return null;
}
LinkNode slow = head;
LinkNode fast = head;
while (fast != null) {
if (fast == null || fast.next == null) {
break;
}
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
public static boolean hasCycle(LinkNode head) {
if (head == null || head.next == null) {
return false;
}
LinkNode p = head;
LinkNode q = head.next;
while (q != null && q.next != null) {
if (p == q) {
return true;
}
p = p.next;
q = q.next.next;
}
return false;
}
}
完整代码
https://gitee.com/dyyx/algo/blob/master/src/main/java/dyyx/FastAndSlowPoint.java
https://leetcode-cn.com/problems/middle-of-the-linked-list/
https://leetcode-cn.com/problems/linked-list-cycle/
上一篇
下一篇
geohash简介
根据经纬度计算距离
二叉树遍历
MySQLTEXT类型最大长度
高效会议六大原则
mysql 单引号转义