输入一个链表的头节点,从尾到头反过来打印处理每个节点的值。
注意:当我们打算修改输入的数据的时候,最好先问一下面试官是不是允许修改。
当不允许修改链表结构的时候,我们考虑是由栈这种结构来实现它,首先遍历链表,每经过一个节点的时候,把它放到栈中,当遍历完整个链表的时候,再从栈顶开始逐个输出节点的值。此时输出的节点就是反序了。
实现代码如下:
public static void main(String[] args) {
ListNode n1 = new ListNode(1);
ListNode n2 = new ListNode(2);
ListNode n3 = new ListNode(3);
ListNode n4 = new ListNode(4);
ListNode n5 = new ListNode(5);
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
ArrayList list = printListFromTailToHead1(n1);
for (int i = 0; i < list.size(); i++) {
System.out.print("->" + list.get(i));
}
}
public static ArrayList<Integer> printListFromTailToHead1(ListNode listNode) {
Stack stack = new Stack();
ArrayList list = new ArrayList();
ListNode p = listNode;
while (p != null) {
stack.push(p);
p = p.next;
}
while (!stack.isEmpty()) {
p = (ListNode) stack.pop();
list.add(p.val);
}
return list;
}