下面的习题是基于上个博客做的:
1. 求单链表中有效节点的个数
//方法:获取到单链表的节点的个数(如果是带头节点的链表,需要不统计头结点)
public static int getLength(HeroNode head){
// if(head.next==null){//空链表
// return 0;
// }
int length = 0;
//定义一个辅助的变量,这里没有统计头结点
HeroNode cur = head.next;
while (cur!=null){
length++;
cur = cur.next;
}
return length;
}
2. 查找单链表中的倒数第k个节点
1.编写一个方法接受head节点,同时接收一个index
2.index表示的是倒数第index个节点
3.先把链表从头到尾遍历一遍,得到链表的总长度getLength
4.得到size之后,我们从链表的第一个开始遍历(size-index)个,就可以得到
5.如果找到了,返回该节点,否则返回null
//方法:获取到单链表的节点的个数(如果是带头节点的链表,需要不统计头结点)
public static int getLength(HeroNode head){
// if(head.next==null){//空链表
// return 0;
// }
int length = 0;
//定义一个辅助的变量,这里没有统计头结点
HeroNode cur = head.next;
while (cur!=null){
length++;
cur = cur.next;
}
return length;
}
//方法:查找单链表中的倒数第k个节点(新浪面试题)
/*
1.编写一个方法接受head节点,同时接收一个index
2.index表示的是倒数第index个节点
3.先把链表从头到尾遍历一遍,得到链表的总长度getLength
4.得到size之后,我们从链表的第一个开始遍历(size-index)个,就可以得到
5.如果找到了,返回该节点,否则返回null
*/
public static HeroNode getLastIndexNode(HeroNode head,int index){
if(head.next==null){
return null;
}
//第一次遍历得到链表的长度
int size = getLength(head);
//第二次遍历size-index位置,就是我们倒数第k个节点
//先做一个Index的校验
if(index<=0 || index>size){
return null;
}
HeroNode temp = head.next;
for(int i=0;i<size-index;i++){
temp = temp.next;
}
return temp;
}