问题
书店店员有一张链表形式的书单,每个节点代表一本书,节点中的值表示书的编号。为更方便整理书架,店员需要将书单倒过来排列,就可以从最后一本书开始整理,逐一将书放回到书架上。请倒序返回这个书单链表。
示例 1:
输入:
head = [3,6,4,1]
输出:
[1,4,6,3]
提示:
0 <= 链表长度 <= 10000
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
vector<int> reverseBookList(ListNode* head) {
}
};
分析
用递归法会比较好做,使用递归进行调用,然后在最深处开始进行输出,就可以实现优先输出最深层元素,也就实现了“逆序”的 操作。
代码
static void reverse_book_list(ListNode* head, std::vector<int> &ret)
{
if (!head)
return;
int val = head->val;
if (head->next) {
reverse_book_list(head->next, ret);
}
ret.push_back(val);
}
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
vector<int> reverseBookList(ListNode* head) {
vector<int> list;
reverse_book_list(head, list);
return list;
}
};