zoukankan      html  css  js  c++  java
  • 单链表常见面试题

    单链表的常见面试题有如下:

      1. 求单链表中有效节点的个数

       代码如下:

     1     //方法:获取到单链表的节点的个数(如果是带头节点的链表,需求不统计头节点)
     2     /**
     3      * @param head 链表的头节点
     4      * @return 返回的就是有效节点的个数
     5      */
     6     public static int getLength(HeroNode head){
     7         if(head.next == null) { //空链表
     8             return 0;
     9         }
    10         //定义辅助变量,这里没有统计头节点
    11         HeroNode temp = head.next;
    12         int length = 0;
    13         while(temp != null) {
    14             length++;
    15             temp = temp.next;
    16         }
    17         return length;
    18     }

      2. 查找单链表中的倒数第k个节点

       代码如下:

     1     //2)查找单链表中的倒数第k个节点【新浪面试题】
     2     /**
     3      * 思路:
     4      * 1.编写一个方法,接收head节点,同时接收一个index
     5      * 2.index 表示是倒数第index个节点
     6      * 3.先把链表从头到尾遍历,得到链表的总长度 getLength
     7      * 4.得到size 后,我们从链表的第一个开始遍历(size - index)个,就可以得到
     8      * 5.如果找到了,则返回该节点,否则返回null
     9      */
    10     public static HeroNode findLastIndexNode(HeroNode head,int index) {
    11         //如果链表为空,返回null
    12         if(head.next == null) {
    13             return null;
    14         }
    15         //遍历得到链表的长度(节点个数)
    16         int size = getLength(head);
    17         //index 校验
    18         if(index <= 0 || index > size) {
    19             return null;
    20         }
    21         //定义辅助变量,for 循环定位到倒数的index
    22         HeroNode cur = head.next;
    23         for(int i = 0; i < size-index;i++) {
    24             cur = cur.next;
    25         }
    26         return cur;
    27     }

      3. 单链表的反转

       代码如下:

     1     //3)单链表的反转【腾讯面试题】
     2     public static void reverseList(HeroNode head) {
     3         //如果当前链表为空,或者只有一个节点,无需反转,直接返回
     4         if(head.next == null || head.next.next == null) {
     5             return;
     6         }
     7         
     8         //定义辅助变量,帮助遍历
     9         HeroNode cur = head.next;
    10         //指向当前节点[cur]的下一个节点
    11         HeroNode next = null;
    12         HeroNode reverseHead = new HeroNode(0,"","");
    13         //遍历原来的链表,每遍历一个节点,就将其取出,并放入 reverseHead 的最前端
    14         while(cur != null) {
    15             next = cur.next;//将next指向cur的下一个节点
    16             cur.next = reverseHead.next;//将cur的下一个节点指向reverseHead的最前端
    17             reverseHead.next = cur;//将cur连接到新的链表上
    18             cur = next;//让cur后移
    19         }
    20         //将head.next 指向 reverseHead.next ,实现单链表的反转
    21         head.next = reverseHead.next;
    22     }

    以上

    朱子家训说:宜未雨而筹谋,勿临渴而掘井。 任何事情要到了跟前才想解决办法,那我们岂不很被动!
  • 相关阅读:
    增量更新代码步骤记录
    软件缺陷管理基本流程
    数据库语言(三):MySQL、PostgreSQL、JDBC
    eclipse的使用
    数据库语言(二):SQL语法实例整理
    windows下MySql没有setup.exe时的安装方法
    数学:完全独立于实际场景的情况下定义的概念,可以正确的描述世界
    数学语言和程序语言的对比:面向过程与面向集合&命题
    iOS开发之IMP和SEL(方法和类的反射)
    iOS之UIButton的normal和selected状态切换
  • 原文地址:https://www.cnblogs.com/jianyingjie/p/12116600.html
Copyright © 2011-2022 走看看