用java代码实现快慢指针
时间: 2024-03-01 18:52:44 浏览: 26
以下是使用Java代码实现快慢指针的示例:
```
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public class Solution {
public ListNode middleNode(ListNode head) {
ListNode slow = head;
ListNode fast = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
}
```
在这个示例中,我们定义了一个链表节点`ListNode`类,包含一个值和一个指向下一个节点的指针。然后我们定义了一个`middleNode`方法,用于找到链表的中间节点。
在方法中,我们定义了两个指针`slow`和`fast`,初始值都指向链表头节点`head`。然后我们通过一个`while`循环,每次将`slow`指针向后移动一步,将`fast`指针向后移动两步,直到`fast`指针到达链表末尾或者倒数第二个节点。此时,`slow`指针就指向链表的中间节点。
这就是一个简单的使用Java代码实现快慢指针的示例。
相关问题
用java实现快慢指针算法
以下是用Java实现快慢指针算法的示例代码:
```
public ListNode middleNode(ListNode head) {
ListNode fast = head, slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
```
其中,`ListNode`是链表节点的定义,包含一个`val`属性和一个指向下一个节点的`next`指针。在这个示例中,我们使用两个指针`fast`和`slow`,分别从链表头部遍历链表,一个每次走一个节点,一个每次走两个节点。当快指针走到链表末尾时,慢指针所在的位置就是链表的中间节点。
需要注意的是,在遍历链表时,我们需要保证`fast`指针不为空并且`fast.next`指针也不为空,否则会出现空指针异常。
用java代码写一个使用快慢指针判断链表是否有环的demo
好的,下面是使用快慢指针判断链表是否有环的 Java 代码示例:
```java
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public class Solution {
public boolean hasCycle(ListNode head) {
if (head == null || head.next == null) {
return false;
}
ListNode slow = head;
ListNode fast = head.next;
while (slow != fast) {
if (fast == null || fast.next == null) {
return false;
}
slow = slow.next;
fast = fast.next.next;
}
return true;
}
}
```
其中,ListNode 是定义链表节点的类,Solution 类中的 hasCycle 方法就是判断链表是否有环的实现方法。在方法中,使用了两个指针 slow 和 fast,分别指向链表的头节点和头节点的下一个节点。然后,不断地让这两个指针向前移动,如果链表存在环,那么 fast 指针一定会在某个时刻追上 slow 指针,此时就可以判断链表存在环;如果链表不存在环,那么 fast 指针会先到达链表结尾,此时就可以判断链表不存在环。