一:题目描述
二:题目解答
解法一:复制数组法
首先我们找出规律,也就是中间节点,就是ListNode.lenngth/2的那个节点,可是ListNode这个是没有求长度的这个方法的。那么对于求长度有什么办法呢?我们可以依次把该链表元素一个个的复制到一个链表中,在复制的过程中计数,就可以得到长度了。
public class class Solution {
public ListNode middleNode(ListNode head) {
ListNode[] ans=new ListNode[100];//题目说明最大长度为100
int i=0;
while(head!=null){
ans[i++]=head;
head=head.next;
}
return ans[i/2];
}
解法二:快慢指针法
class Solution {
public ListNode middleNode(ListNode head) {
ListNode slow=head;
ListNode fast=head;
while(fast.next!=null){
slow=slow.next;
fast=fast.next;
if(fast.next==null){
return slow;
}
fast=fast.next;
}
return slow;
}
}