Java 递归和反向递归通过hasNext()方法循环
大家好,我是java新手,非常感谢大家在这方面的帮助。 好的,这里是我遇到的问题: 我有一个list类和一个listNode类,list类由一个名称、一个firstNode和一个lastNode表示。firstNode和lastNode来自类型listNode,listNode由一个对象(例如数据或对象o)和一个指向列表中下一个节点的nextNode表示,该节点也来自类型listNode 列表类:Java 递归和反向递归通过hasNext()方法循环,java,list,collections,Java,List,Collections,大家好,我是java新手,非常感谢大家在这方面的帮助。 好的,这里是我遇到的问题: 我有一个list类和一个listNode类,list类由一个名称、一个firstNode和一个lastNode表示。firstNode和lastNode来自类型listNode,listNode由一个对象(例如数据或对象o)和一个指向列表中下一个节点的nextNode表示,该节点也来自类型listNode 列表类: public class List { private ListNode firstNode;
public class List {
private ListNode firstNode;
private ListNode lastNode;
private String name;
public List() {
this("list");
}
public List(String listName) {
name = listName;
firstNode = lastNode = null;
}
public void insertAtFront(Object insertItem) {
if (isEmpty())
firstNode = lastNode = new ListNode(insertItem);
else
firstNode = new ListNode(insertItem, firstNode);
}
public void insertAtBack(Object insertItem) {
if (isEmpty())
firstNode = lastNode = new ListNode(insertItem);
else
lastNode = lastNode.nextNode = new ListNode(insertItem);
}
public Object removeFromFront() throws EmptyListException {
if (isEmpty())
throw new EmptyListException(name);
Object removedItem = firstNode.data;
if (firstNode == lastNode)
firstNode = lastNode = null;
else
firstNode = firstNode.nextNode;
return removedItem;
}
public Object removeFromBack() throws EmptyListException {
if (isEmpty())
throw new EmptyListException(name);
Object removedItem = lastNode.data;
if (firstNode == lastNode)
firstNode = lastNode = null;
else {
ListNode current = firstNode;
while (current.nextNode != lastNode)
current = current.nextNode;
lastNode = current;
current.nextNode = null;
}
return removedItem;
}
public boolean isEmpty() {
return firstNode == null;
}
public void print() {
if (isEmpty()) {
System.out.printf("Empty %s\n", name);
return;
}
System.out.printf("The %s is : ", name);
ListNode current = firstNode;
while (current != null) {
System.out.printf("%s", current.data);
current = current.nextNode;
}
System.out.println("\n");
}
@Override
public String toString() {
String stk = "(";
if(isEmpty())return "Empty List";
ListNode checkNode = firstNode;
while (checkNode != null) {
stk += checkNode.data.toString()+ " , ";
checkNode = checkNode.nextNode;
}
return stk+")";
}
public ListNode removeAt (int k){
if(k<=0 || k>getLength())
try{
throw new IllegalValues();
}catch(IllegalValues iv){
iv.printStackTrace();
return null;
}
ListNode newNode = firstNode;
if (k==1) {
ListNode removedNode = firstNode;
firstNode = firstNode.nextNode;
return removedNode;
}
ListNode someNode = firstNode;
for (int i = 1; i < k - 1; i++) {
someNode = someNode.nextNode;
}
ListNode removedNode = someNode.nextNode;
someNode.nextNode = someNode.nextNode.nextNode;
return removedNode;
}
public int getLength(){
ListNode checkNode = firstNode;
int count =0;
while (checkNode != null) {
count++;
checkNode = checkNode.nextNode;
}
return count;
}
public void show(){
if (firstNode==null)
return;
else
System.out.print(firstNode + " ,");
firstNode.show();
}
public void showRev(){
if (lastNode==null)
return;
else
System.out.println(lastNode + ",");
lastNode.showRev();
}
}
我有一个名为show的递归方法,它从头到尾显示列表中的所有对象。现在我正在尝试做一些类似的事情(方法名为showRev()),它从头到尾显示对象(递归方法)而且我不认为有可能做出一个有以前的方法,所以我有点拘泥于这个方法。
我真的很感激你的任何想法
谢谢大家如果允许您的
showRev
方法接受参数,那么我们可以将每个ListNode
存储在java.util.List
中:
public java.util.List<ListNode> showRev(java.util.List<ListNode> nodes) {
if (this.nextNode == null) {
Collections.reverse(nodes);
System.out.println(nodes.stream().collect(Collectors.joining(" ")));
return nodes;
}
nodes.add(lastNode.show());
return showRev(nodes);
}
public java.util.List showRev(java.util.List节点){
if(this.nextNode==null){
集合。反向(节点);
System.out.println(nodes.stream().collect(collector.joining(“”));
返回节点;
}
nodes.add(lastNode.show());
返回showRev(节点);
}
注意,这里的递归除了将ListNode
s添加到java.util.List
之外没有什么特别的作用
要调用此方法,只需向其传递一个new ArrayList()
另外,我不想使用
List
作为类的名称,因为java.util.List
很容易与之混淆。仅供参考:show
不是类列表中的show不是递归的,而是调用ListNode中的show方法,它是递归的nope,它只调用从同一个类但在不同实例上创建的方法。如果调用this.show
,它将是递归的,调用另一个节点。show
不是。这就是我的意思,listnode中的showrev是递归的
public java.util.List<ListNode> showRev(java.util.List<ListNode> nodes) {
if (this.nextNode == null) {
Collections.reverse(nodes);
System.out.println(nodes.stream().collect(Collectors.joining(" ")));
return nodes;
}
nodes.add(lastNode.show());
return showRev(nodes);
}