这道题非常的简单,我自己就相出了三种方法。
快慢指针发、用数组记录法、两次遍历法,我只实现了两种
数组记录法,用空间换时间
package LeetCode.FiveHundredOneToOneThousand;
import LeetCode.ListNode;
public class EightHundredAndSeventhSix {
public ListNode middleNode(ListNode head) {
//先将链表进行遍历,然后算出中间节点,再遍历到中间节点进行记录输出
int len = 0;
ListNode temp = head;
//用空间换时间
ListNode num [] = new ListNode[100];
while (head != null) {
num[len] = head;
len++;
head = head.next;
}
//当是奇数是,默认向下取,偶数时直接取第二个
int mid = len / 2;
return num[mid];
}
}
快慢指针法:
package LeetCode.FiveHundredOneToOneThousand;
import LeetCode.ListNode;
public class EightHundredAndSeventhSix {
public ListNode middleNode(ListNode head) {
ListNode slow = head, fast = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
}