Java数据结构与算法--单链表常见面试题(新浪、百度、腾讯)

此篇文章只是为了讲解链表常见面试题,与前面一篇【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;
}

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;
}

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;
}

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());
    }
}

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小凯子丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值