遍历LinkedStack并显示整个堆栈

时间:2017-02-15 23:26:33

标签: java

好的,所以我试图用toString()打印出以下底部| 5 | 4 | 3 | top。

public String toString(){
    String logString = "bottom|";
    LLNode<T> node;
    node = top;

    while (node != null){
        logString = logString + node.getInfo() + "|";
        node = node.getLink();
        return logString + "top";
    }
    return "Empty Stack";
}

它与堆栈中的0个元素一起使用,并且堆栈中有1个元素,但是我的测试用例失败了全部3个元素。

我迷失了如何获得链表中的前两项。 node = node.getLink();在列表中向前移动,因此它只显示堆栈中的最后一项(顶部)为3,然后终止循环。我该如何倒退?

@Test  
public void test_toString_on_a_stack_with_multiple_elements() {
    stk1.push(5); stk1.push(4); stk1.push(3);
    Assert.assertEquals("bottom|5|4|3|top", stk1.toString());
}   

expected <bottom|5|4|3|top> actual <bottom|3|top>

2 个答案:

答案 0 :(得分:1)

在循环中你不应该return,而是在它之后 此外StringBuilder非常有用。

public String toString(){
    LLNode<T> node = top;
    if (node == null)
        return "Empty Stack";
    StringBuilder toReturn = new StringBuilder("bottom|");
    while (node != null){
        toReturn.append(node.getInfo());
        toReturn.append("|");
        node = node.getLink();
    }
    toReturn.append("top");
    return toReturn.toString();
}

答案 1 :(得分:0)

  

它与堆栈中的0个元素一起使用,并且堆栈中有1个元素,但是我的测试用例失败并且包含完整的3个元素。

问题出在while循环内的return语句中。

while (node != null){
    logString = logString + node.getInfo() + "|";
    node = node.getLink();
    return logString + "top"; // only once the while statement will be executed
}

这就是为什么它适用于堆栈中的0或1个元素。你应该把那个return语句放在while循环之外。