我尝试打印反向链表但没有递归并反转链表。我怎么能这样做?
问题:如何在不使用递归而不反转列表的情况下打印反向链表?
要求:没有多余的空间,无法反转链表,不能使用递归。
这是链表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);
}
表演并不重要,因为我只想这样做。
答案 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);
}
}
}