我在Java的Node中插入了一些元素,显示元素也可以正常工作。但是当我使用递归搜索任何出现的元素时,它的返回值始终为零。对不起,我的英语不好。我是Java数据结构实现中的新手。谢谢
public class pal{
private static Node head;
private static class Node {
private int value;
private Node next;
Node(int value) {
this.value = value;
}
}
public static void addToTheLast(Node node) {
if (head == null) {
head = node;
} else {
Node temp = head;
while (temp.next != null)
temp = temp.next;
temp.next = node;
}
}
public static void printList() {
Node temp = head;
while (temp != null) {
System.out.format("%d ", temp.value);
temp = temp.next;
}
System.out.println();
}
public static void main(String[] args) {
int no ;
Node head = null ;
Scanner sc = new Scanner(System.in);
System.out.print("Enter Number of Element ");
no = sc.nextInt();
for(int i = 0 ;i< no; i ++){
System.out.print("Enter Element ");
int a = sc.nextInt();
if(head == null){
head = new Node(a);
addToTheLast(head);
}else{
addToTheLast(new Node(a));
}
}
printList();
System.out.print("Enter search key");
int key = sc.nextInt();
int yo = count(head,key);
System.out.print(String.valueOf(yo));
}
public int count (Node head,int key){
int cnt = 0;
if(head == null){
return cnt;
}else{
if(temp.value == key)
cnt++;
count(temp.next,key)
}
return cnt;
}
}
如果元素在链接列表中,则始终将值重新调整为0
答案 0 :(得分:0)
当您在count方法中引用变量temp
时,您的代码不会编译,但是它不存在。
您必须将temp
替换为head
。
此外,您在递归调用中丢失了cnt
值。您正在递增cnt
,它是一个局部变量。
我修改了代码以将count的值作为参数传递。
public static int count(Node head, int key, int count){
if(head == null){
return count;
} else {
if(head.value == key) {
return count(head.next, key, count + 1);
} else {
return count(head.next, key, count);
}
}
}
如果您不希望count的调用者将0传递给最后一个参数(如count(head, key, 0)
),请将其设为私有方法,并让公共 search 方法调用此方法(我更喜欢这种方法,因为它更干净)
public static int count(Node head, int key) { //main method calls this
return call(head, key, 0); //calls the above method
}