876. 链表的中间结点
给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
节点ListNode类
public class ListNode {
int val;
ListNode next;
public ListNode() {
}
public ListNode(int val) {
this.val = val;
}
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
方法1
/**
* 采用举例子的方式,声明两个节点pre和tail,pre每次移动一位,tail每次向后移动两位
* 假设链表长度为4,第一次移动,pre在2位置,tail在3位置,第二次移动,pre在3位置,tail为null
* 假设链表长度为5,第一次移动,pre在2位置,tail在3位置,第二次一定,pre在3位置,tail在5位置
* 总结:当走的快的tail,它为null或tail.next为null,pre就走在了想要值的位置,返回即可。
*/
public class Solution {
public ListNode middleNode(ListNode head) {
ListNode pre = head;
ListNode tail = head;
while(tail != null && tail.next != null){
tail = tail.next.next;
pre = pre.next;
}
return pre;
}
}