876_链表的中间结点

876_链表的中间结点

 

package 链表;
/**
 * https://leetcode-cn.com/problems/middle-of-the-linked-list/
 * @author Huangyujun
 *
 */
public class _876_链表的中间结点 {
    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; }
    }
    public ListNode middleNode(ListNode head) {
        //先获得链表的长度,细节错误:头指针在这里已经移动到末尾了,导致后边的移动发生错误,修改为临时指针tmp来辅助
        int len = 0;
//        while(head != null) {
//            len++;
//            head = head.next;
//        }
        
        ListNode tmp = head;
        while(tmp != null) {
        len++;
        tmp = tmp.next;
    }
        //如果是奇数,例如7,/2(int)=3,可以移动 3 步 1 2 3 4 5 6 7
        //如果是偶数,例如 8,/2(int)=4, 1 2 3 4 5 6 7 8
        // 移动 /2(int) 步即可
        int mid = len / 2;
        while(mid-- > 0 && head != null) {
            head = head.next;
        }
        return head;
    }
}

 

posted @ 2021-12-19 23:06  一乐乐  阅读(5)  评论(0编辑  收藏  举报