使用Java中的递归计数链接列表中的出现次数

时间:2019-05-19 03:23:07

标签: java

我在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

1 个答案:

答案 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
}