首页 > 编程语言 >LeetCode《图解算法数据结构》链表:图书整理 I

LeetCode《图解算法数据结构》链表:图书整理 I

时间:2024-12-23 11:53:51浏览次数:2  
标签:std head stk ListNode res next 链表 数据结构 LeetCode

题目

书店店员有一张链表形式的书单,每个节点代表一本书,节点中的值表示书的编号。为更方便整理书架,店员需要将书单倒过来排列,就可以从最后一本书开始整理,逐一将书放回到书架上。请倒序返回这个书单链表。

输入

head = [3,6,4,1]

输出

[1,4,6,3]

解法 1:递归

class Solution {
public:
	std::vector<int> reverseBookList(ListNode* head) {
		recur(head);
		return res;
	}
private:
	std::vector<int> res;
	void recur(ListNode* head) {
		if (head == nullptr) return;
		recur(head->next);
		res.push_back(head->val);
	}
};

解法 2:辅助栈法

class Solution {
public:
	std::vector<int> getResultList(ListNode* head) {
		std::stack<int> stk;
		std::vector<int> res;
		while(head!=nullptr) {
			stk.push(head->val);
			head = head->next;
		}
		while(!stk.empty()) {
			res.push_back(stk.top());
			stk.pop();
		}
		return res;
	}
};

完整代码

#include <iostream>
#include <vector>
struct ListNode {
	int val;
	ListNode* next;
	ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
	std::vector<int> reverseBookList(ListNode* head) {
		recur(head);
		return res;
	}
private:
	std::vector<int> res;
	void recur(ListNode* head) {
		if (head == nullptr) return;
		recur(head->next);
		res.push_back(head->val);
	}
};

void test() {
	ListNode* head = new ListNode(1);
	ListNode* n2 = new ListNode(2);
	ListNode* n3 = new ListNode(3);
	ListNode* n4 = new ListNode(4);
	ListNode* n5 = new ListNode(5);
	
	head->next = n2;
	n2->next = n3;
	n3->next = n4;
	n4->next = n5;
	
	Solution solution;
	std::vector<int> reversedList = solution.reverseBookList(head);
	
	std::cout << "Result: " << std::endl;
	for (int num : reversedList) {
		std::cout << num << " ";
	}
	std::cout << std::endl;
	
}

int main() {
	test();
	return 0;
}
#include <iostream>
#include <vector>
#include <stack>
struct ListNode {
	int val;
	ListNode* next;
	ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
	std::vector<int> getResultList(ListNode* head) {
		std::stack<int> stk;
		std::vector<int> res;
		while(head!=nullptr) {
			stk.push(head->val);
			head = head->next;
		}
		while(!stk.empty()) {
			res.push_back(stk.top());
			stk.pop();
		}
		return res;
	}
};

void test() {
	ListNode* head = new ListNode(1);
	ListNode* n2 = new ListNode(2);
	ListNode* n3 = new ListNode(3);
	ListNode* n4 = new ListNode(4);
	ListNode* n5 = new ListNode(5);
	
	head->next = n2;
	n2->next = n3;
	n3->next = n4;
	n4->next = n5; 
	
	Solution solution;
	std::vector<int> testList = solution.getResultList(head);
	
	std::cout << "Result: " << std::endl;
	for (int x : testList) {
		std::cout << x << " ";
	}
	std::cout << std::endl;
}
int main() {
	test();
	return 0;
}

标签:std,head,stk,ListNode,res,next,链表,数据结构,LeetCode
From: https://www.cnblogs.com/xiins/p/18623644

相关文章

  • 数据结构期末复习
    数据结构期末复习ByPersona_owl第一章绪论1.基本概念和术语数据:计算机操作的对象的总称,是信息的符号表示形式。数据元素:数据的基本单位,通常作为一个整体进行处理,由更小的数据项组成。数据项是数据不可分割的最小单位。数据结构:存在特定关系的数据元素集合,包括......
  • 【数据结构练习题】顺序表与链表LinkedList
    顺序表与链表LinkedList选择题链表面试题1.删除链表中等于给定值val的所有节点。2.反转一个单链表。3.给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。4.输入一个链表,输出该链表中倒数第k个结点。5.将两个有......
  • LeetCode100之实现Trie前缀树(208)--Java
    1.问题描述Trie(发音类似"try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。请你实现Trie类:Trie() 初始化前缀树对象。voidinsert(Stringword) 向前缀树中插入字符串 word ......
  • 数据结构——数组
    目录一、数组的基本概念二、数组的地址计算2.1二维数组元素地址2.2三维数组元素的地址2.3n维数组元素的地址三、数组的顺序存储四、矩阵的压缩存储4.1特殊矩阵4.2稀疏矩阵4.2.1 三元组顺序表矩阵运算——矩阵转置方法1:压缩扫描方法2:快速转置 4.2.2 行逻......
  • 数据结构之栈,队列,树
    目录一.栈1.栈的概念及结构2.栈的实现3.实现讲解1.初始化栈2.销毁栈3.压栈4.出栈5.返回栈顶元素6.返回栈内元素个数7.判断栈内是否为空二.队列1.队列的概念及结构2.队列的实现3.实现讲解1.初始化队列2.销毁队列3.单个成员入队列4.单个成员出队列5.判断队......
  • 【初阶数据结构与算法】八大排序算法之交换排序(冒泡排序,快速排序---hoare、挖坑法、lo
    文章目录一、冒泡排序二、快速排序简介及其大致框架三、快排hoare版本子函数四、快排挖坑法子函数五、快排lomuto双指针子函数六、冒泡排序与快排的性能分析与比较一、冒泡排序   冒泡排序的命名是因为它的排序操作就像水平面在冒泡一样,当我们讲完冒泡排序就知道......
  • 【LeetCode: 141. 环形链表 + 链表】
    ......
  • 【Linux内核】解锁Linux性能:位图数据结构背后的故事
    在日常使用Linux系统的过程中,你是否遇到过系统资源紧张、运行速度缓慢的情况?面对这些问题,我们往往会寻找各种方法来提升性能。而今天要介绍的位图数据结构,就是Linux系统中解决这类问题的一把利器。它以一种简洁而高效的方式,帮助Linux系统更好地管理资源、优化数据存储和处......
  • 排序链表(归并排序)
    给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例1:输入:head=[4,2,1,3]输出:[1,2,3,4]示例2:输入:head=[-1,5,3,4,0]输出:[-1,0,3,4,5]示例3:输入:head=[]输出:[] 方法一:归并排序/***Definitionforsingly-linkedlist.*s......
  • 【内向基环树】LeetCode 2127. 参加会议的最多员工数
    题目https://leetcode.cn/problems/maximum-employees-to-be-invited-to-a-meeting/description/题解从\(i\)向\(favorite[i]\)连边,会形成一张\(n\)个点\(n\)条边的有向图,且该图包含若干个连通块,每个连通块均为基环树,亦即该有向图为基环树森林。以测试用例[1,2,0],进......