zoukankan      html  css  js  c++  java
  • 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);
            
        }
  • 相关阅读:
    tomcat 配置文件下载目录
    AeroSpike 资料
    NodeManager起不来
    添加Microsoft SQL JDBC driver 到 Maven
    广告投放网站集合
    eMarketer:DMP帮广告主搞定大数据处理问题
    HUE 忘记密码
    Git客户端图文详解如何安装配置GitHub操作流程攻略
    httprunner3.x 测试用例-teststeps-RunTestCase
    httprunner3.x 测试用例teststeps-RunRequest
  • 原文地址:https://www.cnblogs.com/guweiwei/p/6855446.html
Copyright © 2011-2022 走看看