【leetcode】链表的中间结点

题目:876. 链表的中间结点 - 力扣(LeetCode) (leetcode-cn.com)

 

思路:

  该题可以使用快慢指针的方法,根据慢指针走1步,快指针走2步的情况,

  a.如果链表的节点个数为奇数,则有一个中间节点:

  可以推出当快指针fast到达链表最后一个节点的时候(fast != null且fast.next == null),则慢指针指向中间节点;

   b.如果链表的节点个数为偶数,则有两个中间节点:

  可以推出当快指针fast到达最后一个节点的后一个,(fast == null 且 fast.next == null),则慢指针指向第二个中间节点;

 

代码:

/**
 * Definition for singly-linked list.
 * 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; }
 * }
 */
class Solution {
    public ListNode middleNode(ListNode head) {

       ListNode slow,fast;
       slow = fast = head;

       while(fast != null && fast.next != null){
           fast = fast.next.next;
           slow = slow.next;
       }

       return slow;
    }
}

 

posted @ 2022-05-01 18:42  MintMin  阅读(14)  评论(0编辑  收藏  举报