背景题目
Leetcode Interview 75 LCR123 图书整理I
LCR 123. 图书整理 I - 力扣(LeetCode)
书店店员有一张链表形式的书单,每个节点代表一本书,节点中的值表示书的编号。为更方便整理书架,店员需要将书单倒过来排列,就可以从最后一本书开始整理,逐一将书放回到书架上。请倒序返回这个书单链表。
示例1:
输入:head = [3,6,4,1] 输出:[1,4,6,3]
0 <= 链表长度 <= 10000
coding思路
根据题面描述,此题实质就是将一个链表倒序链接。倒序的数据结构可以想到FILO的栈(stack),用此辅助栈保存链表里的元素,并创建一个新的vector存储出栈的元素即可。但在编写时,由于stl掌握不够熟练,导致弄混了push和push_back的使用细节。
push和push_back
1. 适用的容器不同。
push_back是vector、deque、list等容器类的成员函数;
push是stack、queue容器类的成员函数。
2. 添加的位置不同。
push_back用于在容器末尾添加一个元素,而push是将元素压入栈顶(即最先添加的元素最后弹出)
解题完整代码
/**
* 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) {
stack<int> stack_help;
ListNode* temp = head;
while(temp!=NULL){
stack_help.push(temp->val);
temp = temp->next;
}
vector<int> vec;
while(!stack_help.empty()){
vec.push_back(stack_help.top());
stack_help.pop();
}
return vec;
}
};