返回链表的中间元素

这是剑指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); } }

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

posted @ 2018-10-29 13:29  鹏鹏进阶  阅读(415)  评论(0编辑  收藏  举报