从尾到头打印链表

无人久伴 提交于 2020-02-27 12:26:29

输入一个链表,从尾到头打印链表每个节点的值。

递归到最后,在一个个的添加进List

1234567891011121314
public ArrayList<Integer> (ListNode listNode) {    ArrayList<Integer> res = new ArrayList<>();    printListFromTailToHead(listNode, res);    return res;}public void (ListNode node, List<Integer> res) {    if (node != null) {        printListFromTailToHead(node.next, res);        res.add(node.val);    }}

使用栈从头到尾装入所有节点即可,因为栈先进后出的特性,在弹出的时候就是从尾到头

123456789101112131415
public ArrayList<Integer> (ListNode listNode) {    ArrayList<Integer> res = new ArrayList<>();    Stack<ListNode> stack = new Stack<>();    ListNode node = listNode;    while (node != null) {        stack.add(node);        node = node.next;    }    while (!stack.empty()) {        node = stack.pop();        res.add(node.val);    }    return res;}

反转链表后再打印

1234567891011121314151617181920212223242526
public ArrayList<Integer> printListFromTailToHead3(ListNode listNode) {    ArrayList<Integer> res = new ArrayList<>();    ListNode node = reverseList(listNode);    while (node != null) {        res.add(node.val);        node = node.next;    }    return res;}public ListNode reverseList(ListNode head) {    ListNode pre = null;    ListNode next;    while (head != null) {        next = head.next;        head.next = pre;        pre = head;        head = next;    }    return pre;}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!