对于家庭作业,我被要求为自定义链表编写一个包含方法.
我知道递归方法应该有一个基本情况,然后是递归情况.但是,我在理解如何编写方法的递归情况时遇到一些麻烦.到目前为止,这是我写的,但我的代码不止一次地执行基本情况.你能给我一些指导吗?
我知道递归方法应该有一个基本情况,然后是递归情况.但是,我在理解如何编写方法的递归情况时遇到一些麻烦.到目前为止,这是我写的,但我的代码不止一次地执行基本情况.你能给我一些指导吗?
public class OrderedList { private Node first; //Constructor public OrderedList() { this.first = null; } //Return the number of items in the list public int size() { int counter = 0; Node pointer = this.first; while (pointer != null) { counter++; pointer = pointer.next; } return counter; } //Return an array of copies of the stored elements public Comparable[] getStore() { Comparable[] elements = new Comparable[size()]; Node pointer = this.first; if (this.first == null) { return elements; } else { int i = 0; while (pointer != null) { elements[i] = pointer.data; pointer = pointer.next; i++; } return elements; } } //true iff item matches a stored element //Recursive public boolean contains(Comparable item) { //Base case if (this.first == null) { return false; } Node pointer = this.first; this.first = this.first.next; if (pointer.data.compareTo(item) == 0) { return true; } //Recursive case else { boolean info = contains(item); pointer.next = this.first; this.first = pointer; return info; } }
解决方法
首先,我喜欢这样做:
public boolean contains(Comparable item) { return containsHelper(this.first,Comparable item); } private boolean containsHelper(Node node,Comparable item) { //base case if(node == null) { return false; } else { if(node.data.compareTo(item) == 0) { return true; } return containsHelper(node.next,item); } }