返回链表的中间元素

Posted chengpeng15

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回链表的中间元素相关的知识,希望对你有一定的参考价值。

这是剑指offer15题的扩展

下面是自己实现的一个类似于LinkedList类,其中findMid方法是获取链表的中间节点的实现方法(在未知列表长度的情况下),大致思路如下:

1、首先在方法中定义slow 、 fast两个局部变量。

2、slow每次循环next一次,fast每次循环next两次,当fast.next==null时表示fast已经执行到达了链表的末尾,而slow刚好执行到链表的一半。

加上这个可以返回偶数个数的第一个,不加返回第二个

        
            if(fast==null){
                break;
            }

 

 

package StackMin.Offer15_FindKthToTail;

public class MidLink {
    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        ListNode L2 = new ListNode(2);
        ListNode L3 = new ListNode(3);
        ListNode L4 = new ListNode(4);
        ListNode L5 = new ListNode(5);
        ListNode L6 = new ListNode(6);
        head.next = L2;
        L2.next = L3;
        L3.next = L4;
        L4.next = L5;
        L5.next = L6;

        findMid(head);
    }

    private static void findMid(ListNode head) {
        ListNode slow = head;
        ListNode fast = head;

//        while (fast!=null){
//            if(fast.next!=null){
//                fast=fast.next.next;
//            }else {
//                break;
//            }
//            slow=slow.next;
//        }

上下两个写法都行 while (fast != null && fast.next != null) { fast = fast.next.next; // 加上注释返回3,不加返回4 // if(fast==null){ // break; // } slow = slow.next; } System.out.println(slow.val); } }

  参考 :[面试]返回链表的中间元素





以上是关于返回链表的中间元素的主要内容,如果未能解决你的问题,请参考以下文章

876. 链表的中间结点

876. 链表的中间结点

力扣——链表题 203.移除链表元素83.删除排序链表中重复元素82.删除排序链表中重复元素Ⅱ206.反转链表 876.链表的中间节点

Q:链表的中间元素

链表876. 链表的中间结点

数据结构-寻找单链表的中间元素