跳到主要内容

四:单链表面试题,新浪、腾讯【有难度】、百度面试题

前言

  • 总结一下单链表的面试题,对其详细的描述。
  • 这个的方法 我都放在了 SingleLinkedListMain 类中,写成了静态方法。

一、 求单链表中有效的个数

1.1 问题描述

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

1.2 思路分析

直接遍历即可,设置一个增加器。

1.3 代码实现

/*
* 方法:获取单链表的有效节点个数(如果是带头结点的链表,需要不统计头结点)
* @param head 链表的头节点
* @return 返回的就是有效节点的个数
* */
public static int getLength(HeroNode head) {


if (head.next == null) {


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


count++;
temp = temp.next;
}
return count;
}

二、 新浪面试题

2.1 问题描述

查找单链表中的倒数第k个结点

2.2 思路分析

思路:

1、 编写一个方法,接收head节点,同时接收一个index;
2、 index表示是倒数第index个节点;
3、 先把链表从头到尾遍历,得到链表的总的长度size=getLength(),这个方法为上面例题;
4、 对index进行数据校验,小于0,大于size,都返回null;
5、 得到size后,我们从链表的第一个开始遍历(size-index)个,就得到了倒数第K个节点;