解题思路:
快慢链表:快链表在遍历每一遍时都走一次,慢链表只在遍历偶数时走一次。当遍历完时,也就是快链表走到最后时,慢链表恰好走到中间的位置。
还有一种方法是通过第一次遍历得到链表长度,然后根据长度再次遍历找到中间节点位置。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode middleNode(ListNode head) {
ListNode quickNode = head;
ListNode slowNode = head;
for(int i=1; quickNode!=null; i++){
quickNode=quickNode.next;
if(i%2==0){
slowNode=slowNode.next;
}
}
return slowNode;
}
}