Question
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
关键词:链表 顺序逆转
Solution
递归
时间复杂度:O(N)
空间复杂度:O(N)
- Python
def printListFromTailToHead(self, listNode):
vals = []
if ListNode:
return(self.digui(listNode, vals))
return ListNode
def digui(self, node, vals):
if node:
if node.next:
self.digui(node.next, vals)
vals.append(node.val)
return vals
- C++
vector<int> vals;
vector<int> printListFromTailToHead(ListNode* head) {
ListNode *p=NULL;
p=head;
if(p!=NULL){
if(p->next!=NULL){
printListFromTailToHead(p->next);
}
vals.push_back(p->val);
}
return vals;
}
存储数值
读取每个节点的数值并储存,最后逆向输出
时间复杂度:O(N)
空间复杂度:O(N)
- Python
def printListFromTailToHead(self, listNode):
# write code here
ans = []
while listNode:
ans.append(listNode.val)
listNode = listNode.next
return ans[::-1]
- C++
// vector可以直接在队头插入,因此无需逆向输出
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> vals;
while(head!=NULL){
vals.insert(vals.begin(), head->val);
head = head->next;
};
return vals;
}