返回链表的中间元素
这是剑指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); } }
参考 :[面试]返回链表的中间元素