题目:1、求单向链表中有效节点的个数 2、查找单向链表中倒数第k个节点
一、解答
1.遍历整个单向链表即可
可以写在SingleLinkedList类中。这里传入的是头节点,然后返回的是单向链表的长度。
思路:遍历整个单向链表就行了。
代码如下(示例):
public int getlength(HeroNode head){
if (head.next==null){
System.out.println("链表为空,无有效节点");
return 0;
}
int length=0;
HeroNode temp = head;
while (true){
if (temp.next==null){
break;
}
length++;
temp=temp.next;
}
return length;
}
public HeroNode getHead() {
return head;
}
2.解答
思路:先计算出整个单向链表的长度length,然后计算出倒数第k个结点前面有多少个结点。
也就是num=length-k。
然后利用循环来输出到num这个点的结点
代码如下(示例):
//查找单链表中的倒数第k个节点
//思路:先把链表的有效长度找出来,然后用总长度length-k=前面的节点的总数
public HeroNode uptopk(int k,HeroNode head){
int length = getlength(head);
int num =length-k;
HeroNode temp = head;
for (int i =0;i<num;i++){
temp=temp.next;
}
return temp.next;
}
3.可以在SingleLinkedListDemo中检验
<font color=#999AAA >代码如下(示例):
//查找单链表中的倒数第k个节点
//思路:先把链表的有效长度找出来,然后用总长度length-k=前面的节点的总数
int length = singleLinkedList.getlength(singleLinkedList.getHead());
System.out.println("有效节点个数:"+length);
HeroNode uptopk=singleLinkedList.uptopk(1, singleLinkedList.getHead());
System.out.println("倒数第1个节点为:"+uptopk);