赞
踩
这道题有两种解法
第一种解法就是最普通的暴力解法,先遍历一遍,再取长度的中间数进行遍历,然后得到想要的节点
时间复杂度是O(3/2 N)
第二种解法就是用快慢指针的方法进行求解
这个方法使用了两个指针,A指针每次循环都往前走一步,B指针要A指针走两步,他才会走一步
这样,当A指针走到尾结点时,B指针就在中间结点
注意:在这道题中,如果结点数是偶数的话,要中间值+1,所以要多一个判断
- class Solution {
- public ListNode middleNode(ListNode head) {
- ListNode now=head;
- ListNode half=now;
- int count=0;
- while(now.next!=null){
- now=now.next;
- count++;
- if(count%2==0){
- half=half.next;
- }
- }
- //这里是对结点数位偶数时进行判断
- if(count %2 !=0)
- half=half.next;
-
- return half;
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。