思路: 求有效值,当然是遍历链表啦。
这个面试题比较简单,就相当于遍历下链表,所以链表功能方面的代码我没有些写完。
代码如下:
package com.guigu.LinkedListDemo;
public class CountNodes {
public static void main(String[] args) {
DataNode node1 = new DataNode(1);
DataNode node2 = new DataNode(2);
DataNode node3 = new DataNode(3);
DataNode node4 = new DataNode(4);
SingleLindkedList singleLindkedList = new SingleLindkedList();
singleLindkedList.add(node1);
singleLindkedList.add(node2);
singleLindkedList.add(node3);
singleLindkedList.add(node4);
int res = countList(singleLindkedList);
System.out.println("有效值的个数为 " + res);
}
public static int countList(SingleLindkedList list) {
DataNode temp = list.getHead().next;
int sum = 0; //用来统计有效值的个数
while(true) {
if(temp == null) {
break;
}
sum++; //sum加1
temp = temp.next;
}
return sum;
}
}
//声明一个单链表类
class SingleLindkedList{
private DataNode head = new DataNode(0); //声明一个头结点,不存放有效数据,头结点不动
//获得头节点
public DataNode getHead() {
return head;
}
//插入节点
public void add(DataNode dataNode) {
DataNode temp = head;
while(true) {
if(temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = dataNode;
}
}
//声明一个节点类
class DataNode{
public int data; //存放数据
public DataNode next; //指向下一个节点
//构造器
public DataNode(int data) {
this.data = data;
}
}
输出结果: