求单链表中有效节点的个数
代码思路
代码实现
/**
* 方法:获取到单链表的节点的个数(如果是带头结点的链表,需求不统计头节点)
* @return 返回的就是有效节点的个数
*/
public int length() {
if (this.head.next == null) {
System.out.println("链表为空");
return 0;
}
// 定义一个辅助的变量, 这里我们没有统计头节点
HeroNode cur = this.head.next;
int length = 0;
while (cur != null) {
length++;
cur = cur.next;
}
return length;
}
测试:
public class SingleLinkedListDemo {
public static void main(String[] args) {
// 进行测试
// 先创建节点
HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
SingleLinkedList singleLinkedList = new SingleLinkedList();
System.out.println("链表长度: " + singleLinkedList.length());
}
}
查找单链表中的倒数第 k 个结点
代码思路
查找单链表中的倒数第k个结点 【新浪面试题】
- 首先,获取整个链表中元素的个数 size
- 在使用 for 循环定位至倒数第 index(形参) 个节点,返回即可
- for 循环的条件应如何确定?for (int i = 0; i < x; i++) 中 x 的值应是多少?我们需要定位至倒数第 index 个节点,在 for 循环之前,我们已经定位置首节点,还需再走 (size - index ) 步,定位至倒数第 index 个节点
举例说明:链表中一共有 4 个元素,想要定位至倒数第 2 个节点,那么需要在首节点之后走两步,到达倒数第 2 个节点
代码实现
/**
* 查找单链表中的倒数第k个结点
*
* 查找单链表中的倒数第k个结点 【新浪面试题】
* 思路
* 1. 编写一个方法,接收head节点,同时接收一个index
* 2. index 表示是倒数第index个节点
* 3. 先把链表从头到尾遍历,得到链表的总的长度 getLength
* 4. 得到size 后,我们从链表的第一个开始遍历 (size-index)个,就可以得到
* 5. 如果找到了,则返回该节点,否则返回null
*/
public HeroNode findLastIndexNode(int index) {
// 判断如果链表为空,返回null
if (this.head.next == null) {
System.out.println("链表为空");
return null;
}
// 第一个遍历得到链表的长度(节点个数)
int size = length();
// 第二次遍历 size-index 位置,就是我们倒数的第K个节点
// 先做一个index的校验
if (index <= 0 || index > size) {
return null;
}
HeroNode cur = this.head.next;
// 定义给辅助变量, for 循环定位到倒数的index
for (int i = 0; i < size - index; i++) {
cur = cur.next;
}
return cur;
}
public class SingleLinkedListDemo {
public static void main(String[] args) {
// 进行测试
// 先创建节点
HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
SingleLinkedList singleLinkedList = new SingleLinkedList();
System.out.println("查找倒数第n个node: " + singleLinkedList.findLastIndexNode(2));
}
}