如何从结尾开始为链表中的列表节点创建递归'show'方法?

时间:2014-06-17 01:38:13

标签: java recursion

我有两个准备好的类,一个用于'List'(链表)和一个用于'ListNode',他们要求我(用于家庭作业)为'List'类创建递归'showRev'方法,该类使用另一个ListNode类的'showRev'方法......

这个方法应该做的是显示列表,但从结尾开始,与show相反。

所以我需要两种方法,但是'List'会使用'ListNode'。

这是我的代码:

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;
    }
.
.
.
.//there are more methods here
.
.
.
public void showRev()
    {
        //what do you suggest?
    }

这是ListNode类:

public class ListNode {

    Object data;
    ListNode nextNode;


    public ListNode(Object o)
    {
        this(o,null);
    }


    public ListNode(Object o,ListNode node)
    {
        data=o;
        nextNode=node;
    }


    public Object getObject()
    {
        return data;
    }


    public ListNode getNext()
    {
        return nextNode;
    }


    public void show () 
    {
        System.out.println(this.getObject());
        if (this.nextNode != null) {
            this.nextNode.show();
        }
    }


    public void showRev ()
    {
        // what do you suggest?
    }


}

2 个答案:

答案 0 :(得分:0)

由于这是作业,我不会给你一个答案,而是给你一些可以引导你回答的想法。

如果要解决递归问题,可以将问题分解为同一问题的一个或多个较小实例。

在这种情况下,您有List。您可以将其分解为第一个节点"和"列表的其余部分"。 "列表的其余部分"是同一问题的较小实例。

如果您的问题是以相反的顺序显示List,并且您已经有了一种神奇的方式来显示"列表的其余部分"以相反的顺序,你怎么能解决这个问题?这需要一点思考。如果你遇到困难,试着考虑只有两三个元素的列表。

如果你能搞清楚,那么你有答案。 "魔术方式"显示列表的其余部分将是递归调用。然后您需要做的就是找出何时停止("基本情况"):您希望该方法在什么时候停止以递归方式调用自身?

答案 1 :(得分:0)

你可以让你的方法做这样的事情来通过递归打印反向列表。

 public void showRev(ListNode node)
  {
    if (node != null) {
      showRev(node.nextNode);
      System.out.println(node.data);
    };
  }