• 7.查找单链表中的中间结点


    题目分析:

           链表的特点就是有很多的节点,每个节点有数据域和指针域两部分,指针域存放的是下一个节点的地址,根据地址找到下一个节点。链表只能从前到后遍历,不能从后到前遍历。

           对于这个问题,我们首先能够想到的就是先遍历一遍整个的链表,然后计算出链表的长度,进而遍历第二遍找出中间位置的数据。这种方式非常简单。

           若题目要求只能遍历一次链表,那又当如何解决问题?可以采取建立两个指针,一个指针一次遍历两个节点,另一个节点一次遍历一个节点,当快指针遍历到空节点时,慢指针指向的位置为链表的中间位置,这种解决问题的方法称为快慢指针方法。(面试尽量用这种方式,能够提高印象分)

        // 方法:查找链表的中间结点 
        public Node findMidNode(Node head) {
            if (head == null) {
                return null;
            }
            Node first = head;
            Node second =head;
            // 每次移动时,让second结点移动两位,first结点移动一位 
            while (first != null && second != null) {
                first = first.next;
                second = second.next.next;
    
            }
            return first;
        }

    测试代码:

        public static void main(String[] args) {
            LinkList list = new LinkList();
            // 向LinkList中添加数据
            for (int i = 0; i < 10; i++) {
                list.add(i);
            }
            list.print(list.head);// 从head节点开始遍历输出
            System.out.print(list.getLength(list.head));
            System.out.print("
    ");
    //        System.out.print(list.findLastNode(10));
            System.out.print(list.findLastNode(list.head,7).getData());
            System.out.print("
    ");
            System.out.print(list.findMidNode(list.head).data);
            
        }
  • 相关阅读:
    几何——BAPC2019 K
    dsu on tree —— BAPC2019 A
    概率dp——BAPC2019 L
    计算几何+三分求极值——cf1046I
    上下文管理器
    转 -- 一行式
    转--python 基础
    转--python 面试题
    转 -- Python: 多继承模式下 MRO(Method Resolution Order) 的计算方式关乎super
    转--python之正则入门
  • 原文地址:https://www.cnblogs.com/guweiwei/p/6855446.html
Copyright © 2020-2023  润新知