如何在不使用Java递归的情况下打印反向链表?

时间:2016-06-08 15:27:17

标签: java recursion linked-list iteration singly-linked-list

我尝试打印反向链表但没有递归并反转链表。我怎么能这样做?

问题:如何在不使用递归而不反转列表的情况下打印反向链表?

要求:没有多余的空间,无法反转链表,不能使用递归。

这是链表Node

的定义
class Node {
  int value;
  Node next;

  public Node(int val) {
    this.value = val;
  }
}

这是printReverseLinkedList的递归版本:

public void printReverseList(Node head) {
    Node temp = head;
    if (temp.next != null) {
        printReverseList(temp.next);
    }
    System.out.print(temp.value);
}

表演并不重要,因为我只想这样做。

5 个答案:

答案 0 :(得分:3)

如果您既不能反转列表,也不能使用递归,那么唯一的方法就是:

public void printReversList(Node head) {

    Node current = head; // used to search through the list
    Node last    = null; // stores the last element that we printed

    while (last != head) { // = we didn't print everything yet

        // find next element to print - it's one element before we reach "last"
        while (current.next != last) {
            current = current.next;
        }

        // Store the current element as the new last and print it
        last  = current;
        system.out.print(last.value);

        // reset current and start all over
        current = head;
    }
}

这是非常无效的,但我没有别的办法可以想到。

答案 1 :(得分:3)

如何使用堆栈然后弹出?你说使用另一种数据结构会很好。这不是很好的代码,但应该完成工作。

public void printReversList(Node head) {

    Stack<Node> stack = new Stack<>();

    while (head != null){

       stack.push(head);
       head = head.next;          
   }

   while (!stack.isEmpty()){
       System.out.println(stack.pop());
   }
}

答案 2 :(得分:0)

你可以试试这个:

app.all('/', function(req,res){
  res.redirect('/!/dashboard');
});
app.use('/login', routes.login);
app.use('/!/dashboard', isLoggedIn, routes.dashboard);

答案 3 :(得分:0)

void ReversePrint(Node head) {
    // This is a "method-only" submission.
    // You only need to complete this method. 
    Stack<Node> stk=new Stack<>();

    Node temp=head;
    while(temp!=null){
        stk.push(temp);
        temp=temp.next;
    }
    while(!stk.isEmpty()){
        System.out.println(stk.pop().data);
    }
}

答案 4 :(得分:0)

public void printReverseList(Node head) {
        Node node = head;
        List<Integer> list = new ArrayList<Integer>();
            if (head == null){
                System.out.println(head.data); 
            }
            else{
               while (node != null){
                list.add(0, node.data);
                node = node.next;
            }
            for (int item:list){
                System.out.println(item);
            }
        }
    }