876. Middle of the Linked List

Given a non-empty, singly linked list with head node head, return a middle node of linked list.

If there are two middle nodes, return the second middle node.

Example 1:

Input: [1,2,3,4,5]
Output: Node 3 from this list (Serialization: [3,4,5])
The returned node has value 3. (The judge's serialization of this node is [3,4,5]).
Note that we returned a ListNode object ans, such that:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, and ans.next.next.next = NULL.

Example 2:

Input: [1,2,3,4,5,6]
Output: Node 4 from this list (Serialization: [4,5,6])
Since the list has two middle nodes with values 3 and 4, we return the second one.

题目

返回链表中间结点,若长度为偶数,则返回靠后的中间结点

思路

经典题目,快慢指针法
定义两个指针fast和slow,从head开始fast每次走两步,slow每次走一步,当fast走到头时,slow刚好走到中间,返回slow

代码

 public ListNode middleNode(ListNode head) {
         if (head==null||head.next==null) {//当链表为空或者只有一个元素时
            return head;
        }
         if (head.next.next==null) {//当链表有两个元素时
            return head.next;
        }
         ListNode fast=head;
         ListNode slow=head;
         while (fast!=null&&fast.next!=null) {//一般情况
            fast=fast.next.next;
            slow=slow.next;
        }
        
        return slow;
            
        }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容