链表的中间节点
链表的中间结点
https://www.nowcoder.com/practice/d0e727d0d9fb4a9b9ff2df99f9bfdd00?tpId=196&tqId=40336&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26pageSize%3D50%26search%3D%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=undefined&judgeStatus=undefined&tags=580&title=
链表的中间节点
思路:
1.设置两个指针,一个快指针fast和慢指针slow,快指针以两个节点两个节点进行移动,慢指针以一个节点进行移动
2.只要当fast指针和fast.next指针还没有指向null
3.最后slow指向的就是链表的中点
代码:
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
public ListNode middleNode (ListNode head) {
//如果是空的链表,就直接返回链表的头结点
if(head==null){
return head;
}
//设置两个指针:fast和slow分别指向链表的首地址
//让fast以两个节点两个节点的速度进行移动,让slow以一个节点的速度移动
ListNode fast=head;
ListNode slow=head;
//只要快节点和其下一个节点还没有到达null
//就让快节点以慢节点的两倍速走
while(fast!=null&&fast.next!=null){
slow=slow.next;
fast=fast.next.next;
}
//最后慢指针指向的就是链表的中间
return slow;
}
}