用 std::list 删掉一个人
补全:从 std::list 里删掉「小满」,然后输出「长度/第二个」,格式如 3/乙。 (本题用 g++ -std=c++17 -O0 编译。)
两头都能插的 std::list
运行下面这段程序: #include <iostream> #include <list> #include <string> using namespace std; int main() {
unique_ptr 链表的头插
补全 push_front:next 是 unique_ptr 的链表,头插要用 std::move 转交所有权。依次头插四个人后再插「北辰」,输出「第一个/总数」,格式如 甲/5。 (本题用 g++ -std=c++17 -O0 编译。)
用 std::list 反转
补全:用 std::list 自带的成员函数把整条链反转,然后输出「第一个/最后一个」,格式如 甲/乙。 (本题用 g++ -std=c++17 -O0 编译。)
反转链表实际在做什么
第 1 步:原来:3→7→5→9 第 2 步:3 的 next 掉头指回去 第 3 步:prev、cur 各前进一步 第 4 步:7 的 next 掉头指回去 第 5 步:prev、cur 各前进一步 第 6 步:5 的 next 掉头指回
改指向之前为什么先存住 next
掉头之前必须先用一个变量存住 cur->next,因为【0】。
反转之后第一个是谁
运行下面这段程序: #include <iostream> #include <string> #include <vector> using namespace std; struct Node {
反转之后最后一个是谁
运行下面这段程序: #include <iostream> #include <string> #include <vector> using namespace std; struct Node {
三个指针把链掉个头
补全 reverse:用 prev / cur / nxt 三个指针原地反转,返回新的头。补全后输出第一个人的名字。 (本题用 g++ -std=c++17 -O0 编译。)
掉头之后尾巴上是谁
同一个 reverse。这回走到底,输出反转后最后一个人的名字。 (本题用 g++ -std=c++17 -O0 编译。)