0%

从头到尾打印链表

从头到尾打印链表,牛客网leetcode

本文记录了两种方法,并分别给出了两种方法的耗时以及耗时分析。

题目

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

方法1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> vec;
if (head == nullptr) {
return vec;
}
auto begin = vec.begin();
while (head != nullptr) {
begin = vec.insert(begin, head->val);
head = head->next;
}
return vec;
}
};

此种方法直接在新的vector的头部插入内容。vector底层使用数组实现,在尾部插入的时间复杂度为O(1),在头部插入的时间复杂度为O(n)。因此本方法效率非常低。leetcode上时间为92ms。

方法2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> vec;
if (head == nullptr) {
return vec;
}
while (head != nullptr) {
vec.push_back(head->val);
head = head->next;
}
return vector<int>(vec.rbegin(), vec.rend());
}
};

此种方法直接在vector队尾插入元素。返回一个使用逆序指针构建的数组。leetcode上时间为4ms。

请作者喝咖啡