Java实现求链表的中间结点

给出任意单向链表,找出并返回该链表的中间节点。

奇数长度的链表,例如:1->2->3->4->5
返回节点 3
偶长度的链表,例如:1->2->3->4->5->6
返回节点 4

思路:可以使用链表中环检测的方法,使用快慢指针来解决
定义两个指针fast和slow。slow一次遍历一个节点,fast一次遍历两个节点,由于fast的速度是slow的两倍,所以当fast遍历完链表时,slow所处的节点就是链表的中间节点。

代码如下:

    public class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
        }
    }
    
    /**
     * 寻找链表的中间节点
     * 
     * @param node
     * @return
     */
    public static ListNode middleNode(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }

        ListNode slow = head;
        ListNode fast = head.next;

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

        
        return fast == null ? slow : slow.next;
    }
  
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...
    醒着的码者阅读 4,620评论 1 45
  • 一、链表的定义 链表是一种递归的数据结构,是一种线性结构,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下...
    熊喵先森阅读 1,491评论 0 3
  • 单链表 单链表问题与思路 找出单链表的倒数第K个元素(仅允许遍历一遍链表)使用指针追赶的方法。定义两个指针fast...
    wxkkkkk阅读 617评论 0 0
  • 判断两个单链表是否相交以及相交的情况下求第一个相交节点,两个链表可以有环,也可以无环。因此我们可以从以下几个步骤分...
    Yufail阅读 1,824评论 2 5
  • 大V课堂美国幼儿教育专家李坤珊博士的课堂笔记! 这是一堂关于儿童情绪教养的课程! 情绪是对某一事情的感受,比如开心...
    沄雁阅读 269评论 0 0