1.先遍历整个链表,求出链表长度,在进行循环找出中间结点
public class Solution {
public ListNode middleNode(ListNode head) {
int len=0;
for(ListNode cur=head;cur!=null;cur=cur.next)
len++;//遍历算出链表长度
ListNode node=head;
for(int i=0;i<len/2;i++)
node=node.next;
return node;
}
}
2.利用快慢指针,定义两个引用,fast指针一次走两步,slow指针一次走一步,直至fast.next=null停止,即为中间结点
public class Solution {
public ListNode middleNode(ListNode head) {
ListNode fast=head;
ListNode slow=head;
while(fast!=null){
fast=fast.next;
if(fast==null){
break;
}//因为fast每次走两步,有可能走一步时就到了最后(奇数节点时)
slow=slow.next;
fast=fast.next;
}
return slow;
}
}