当前位置:   article > 正文

Java数据结构与算法--单链表常见面试题(新浪、百度、腾讯)_实现一个方法, 接收一个链表的头结点, 和int类型值x; 获取这个链表的倒数第x个结

实现一个方法, 接收一个链表的头结点, 和int类型值x; 获取这个链表的倒数第x个结

此篇文章只是为了讲解链表常见面试题,与前面一篇【Java数据结构与算法–链表(Linked List)文章链接】文章是接着的。前一篇文章也有此部分代码,是非常完整的,是拿来就能用的。

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

1)求单链表中有效节点的个数
代码如下:

// 获取链表的长度(有效节点的个数)
public int getLength(){
    if (head.next==null){
        return 0;
    }
    HeroNode current = head.next;
    int length = 0;
    while (current!=null){
        length++;
        current = current.next;
    }
    return length;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2)查找单链表中的倒数第 k 个结点(新浪面试题)。
代码如下:

//思路
//1. 编写一个方法,接收 head 节点,同时接收一个 index
//2. index 表示是倒数第 index 个节点
//3. 先把链表从头到尾遍历,得到链表的总的长度 getLength
//4. 得到 size 后,我们从链表的第一个开始遍历 (size-index)个,就可以得到
//5. 如果找到了,则返回该节点,否则返回 null
public HeroNode findLastIndexNode(int index) {
    //判断如果链表为空,返回 null
    if (head.next == null) {
        return null;
    }
    //第一个遍历得到链表的长度(节点个数)
    int length = getLength();
    //第二次遍历 length-index 位置,就是我们倒数的第 K 个节点
    // 校验
    if (index > length || index <= 0) {
        return null;
    }
    HeroNode current = head.next;
    for (int i = 0; i < length - index; i++) {
        current = current.next;
    }
    return current;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

3)单链表的反转(腾讯面试题)。
思路分析图解:
单链表反转的思路分析图解1单链表反转的思路分析图解2 代码实现:

// 单链表的反转
public void reverseLinked() {
    if (head.next == null || head.next.next == null) {
        return;
    }
    // 指向链表的第一个节点
    HeroNode current = head.next;
    // 用作备份下一个节点
    HeroNode next = null;
    HeroNode reverseNode = new HeroNode(0, "", "");
    while (current != null) {
        next = current.next;
        current.next = reverseNode.next;
        reverseNode.next = current;
        current = next;
    }
    this.head = reverseNode;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

4)从尾到头打印单链表 【百度,要求方式 1:反向遍历 。 方式 2:Stack 栈】
思路分析图解:
从尾到头打印单链表思路分析图解代码实现:

// 单链表逆向打印
public void reversePrint() {
    if (head.next == null) {
        return;
    }
    Stack<HeroNode> nodeStack = new Stack<>();
    HeroNode current = head.next;
    // 将链表的所有节点入栈
    while (current != null) {
        nodeStack.push(current);
        current = current.next;
    }
    // 将链表的所有节点出栈
    while (nodeStack.size() > 0) {
        System.out.println(nodeStack.pop());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

完整代码请参照上一篇的【Java数据结构与算法–链表(Linked List)】
连接奉上:文章连接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/556881
推荐阅读
相关标签
  

闽ICP备14008679号