C++中stack和vector的push和push_back操作

本文介绍了如何使用栈(stack)数据结构解决LeetCode题目LCR123图书整理问题,通过将链表元素逐个压入栈中,然后从栈中弹出并添加到新链表中,实现了链表的逆序操作。作者在编码过程中提到对STL中的push和push_back的区别不熟悉。
摘要由CSDN通过智能技术生成

背景题目

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;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值