单链表之大厂面试题

作者: 先生zeng | 来源:发表于2019-06-07 23:50 被阅读3次

上一节已经更新了单链表的基本实现,和特征。接下来将分享一些笔试中大厂对单链表进行笔试时,会出的一些面试题。应用场景是上一节的代码里面的,这里将贴出具体的实现方法的代码,想要全部代码,可以看上一篇文章的链接:
https://www.jianshu.com/p/6d99b791d758

下面将展示一些面试题:
1.求单链表中节点的个数(代表头的和不带表头的)
2.查找单链表中的倒数第K个节点。
3.单链表的反转。
4.从尾到头打印单链表。
5.合并两个有序的单链表,合并后依然有序。

1.求单链表中节点的个数(代表头的和不带表头的)

/**
         * 新浪面试题锦集:
         * 1.求单链表中有效节点的个数
         */
        public int getLength(HeroNode head) {

            HeroNode temp = head;
            int length = 0;
            while (true) {
                if (temp.next == null) {
                    break;
                }
                length++;
                temp = temp.next;
            }
            return length;
        }

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

/**
         * 找到链表的最后第K个节点
         * <p>
         * 思路:
         * 1.先遍历过去单链表的总长度
         * 2.将总长度size减去K,得到Index
         * 3.从表头开始遍历到index,此时就是链表的倒数第K个节点了。
         * @return
         */
        public HeroNode getLastIndexLinkedList(HeroNode head,int k) {
            int length = getLength(head);
            int index = length - k;
            if(length == 0){
                System.out.println("该链表为null");
                return null;
            }else if(k<0 || index < 0){
                System.out.println("这个k值输入有误");
                return null;
            }else if(index>length){
                System.out.println("没有找到该节点");
                return null;
            }

            HeroNode temp=head;
            for(int i=0;i<=index;i++){
                temp=temp.next;
            }
            System.out.println(temp);
            return temp;
        }

3.单链表的反转。


image.png
/**
         * 腾讯面试题
         * 将单链表进行反转
         */
        public HeroNode reversetLinkedList(HeroNode head) {

            if(head.next==null || head.next.next==null){
                System.out.println("当前链表为空或者只有一个,不需要反转");
            }

            HeroNode reversetList = new HeroNode(0, "", "");
            HeroNode next=null;
            HeroNode cur=head.next;

            while (cur!=null){
               next=cur.next;
               cur.next=reversetList.next;
               reversetList.next=cur;
               cur=next;
            }
            return reversetList;
        }
4.从尾到头打印单链表。 image.png
/**
         * 从尾到头打印单链表(百度)
         * 思路: 1.先将链表反转,然后再打印(会破坏原来的结构,不建议)
         *         2.使用栈来实现。
         */
        public void printLinkedList(HeroNode head){

            if(head==null || head.next==null){
                System.out.println("该链表为空");
                return;
            }
            Stack<HeroNode> heroNodes = new Stack<>();
            HeroNode temp = head;
            while (temp.next!=null){

                if(temp.next!=null){
                    heroNodes.push(temp.next);
                }
                temp=temp.next;
            }

            while (heroNodes.size()!=0){
                System.out.println(heroNodes.pop());
            }
        }

相关文章

  • 单链表之大厂面试题

    上一节已经更新了单链表的基本实现,和特征。接下来将分享一些笔试中大厂对单链表进行笔试时,会出的一些面试题。应用场景...

  • 《剑指Offer》-Exercise(C语言)

    面试题4:二维数组中的查找 面试题6:从尾到头打印链表 单链表从尾到头打印(用栈或递归) 单链表结构 面试题7:重...

  • 算法面经--单链表的操作

    单链表操作(附:新浪百度腾讯面试题) 一、单链表介绍 1.1 单链表在内存中的样子 (物理结构) 1.2 逻辑结构...

  • java 单链表反转

    最近与人瞎聊,聊到各大厂的面试题,其中有一个就是用java实现单链表反转。闲来无事,决定就这个问题进行一番尝试。 ...

  • 单链表是否存在环

    面试题:如何检测一个单链表是否有环?如果有环的入口在哪里? 题目描述: 单链表有环指的是单链表中某个结点的next...

  • 单链表

    以下是学习单链表的一些记录,包含一些增删改和遍历的方法,以及5个常见面试题的解答记录节点如下 面试题 1、求单链表...

  • 算法学习——线性表

    线性表分为:顺序表和链表 1.腾讯面试题(快速找到未知长度单链表的中间节点?) 普通算法:先遍历一个遍单链表以确定...

  • 线性表之单链表实现

    线性表之单链表实现 实现单链表的初始化、插入、删除等基本运算 实现单链表的输入、输出运算 实现单链表的逆置、归并、...

  • 大厂面试系列(七):数据结构与算法等

    数据结构和算法 链表 链表,常见的面试题有写一个链表中删除一个节点的算法、单链表倒转、两个链表找相交的部分,这个一...

  • 搞懂单链表常见面试题

    搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...

网友评论

    本文标题:单链表之大厂面试题

    本文链接:https://www.haomeiwen.com/subject/dgzpxctx.html