您的位置:首页 > Web前端

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

2018-01-21 10:05 477 查看

解题思路一:

翻转链表,然后打印,但是这样改变原来的链表

import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if (listNode == null)
return new ArrayList<Integer>();
//翻转链表,需要空间复杂度为 O(1)
ArrayList<Integer> result = new ArrayList<>();
ListNode tail = new ListNode(0);
tail.next = null;
ListNode currentNode = listNode;
while (listNode != null) {
currentNode = listNode;
listNode = listNode.next;
currentNode.next = tail;
tail = currentNode;
}
while (currentNode.next != null) {
result.add(currentNode.val);
currentNode = currentNode.next;
}
return result;
}
}


解题思路二

使用递归 ,优点是不改变原来链表的结构,但是空间复杂度高,需要O(n)

import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if (listNode == null) {
return new ArrayList<Integer>();
}
ArrayList<Integer> res = new ArrayList<>();
printList(res, listNode);
return res;
}

public void printList(ArrayList<Integer> list, ListNode listNode) {
if (listNode.next == null){
list.add(listNode.val);
return;
}
printList(list, listNode.next);
list.add(listNode.val);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表