链表
我不是宸哥
要为真理而斗争
展开
-
JZ36 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示数据范围:输入二叉树的节点数0 \le n \le 10000≤n≤1000,二叉树中每个节点的值0\le val \le 10000≤val≤1000要求:空间复杂度O(1)O(1)(即在原树上操作),时间复杂度O(n)O(n)方法一:中序递归,二叉搜索树的中序遍历正是从大到校排列的顺序,先while循环root->找到要返回的头节点,在全局变量一空节点指针,进行中序遍历,每次将root->left ...原创 2022-04-01 15:04:05 · 352 阅读 · 0 评论 -
JZ35 复杂链表的复制
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。方法一:递归,用一个散哈希表将拷贝的链表与原链表一一对应,递归时用哈希表判断当前节点的拷贝是否已经创建,如果没有创建则创建,如果已经创建,则返回拷贝链表的指针classSolution{public:unordered_map<Node*,Node*>map1;Node*c...原创 2022-04-01 12:17:27 · 845 阅读 · 0 评论 -
JZ25 合并两个排序的链表
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。数据范围:0 \le n \le 10000≤n≤1000,-1000 \le 节点值 \le 1000−1000≤节点值≤1000要求:空间复杂度O(1)O(1),时间复杂度O(n)O(n)方法一:新建一个哑节点,逐个比较两条链表值的大小还是比较简单的class Solution {public: ListNode* Merge(ListNode* pHead1, ListNode* p...原创 2022-03-28 14:04:25 · 1074 阅读 · 0 评论 -
JZ24 反转链表
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围: 0\leq n\leq10000≤n≤1000要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转换过程如下图所示:方法一:使用stack容器储存每一个节点,最后再反转逐个提取即可。class Soluti...原创 2022-03-24 19:54:17 · 725 阅读 · 0 评论 -
链表中环的入口结点
给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。数据范围: n\le10000n≤10000,1<=结点值<=100001<=结点值<=10000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台会根据原创 2022-03-24 19:21:57 · 1177 阅读 · 0 评论 -
JZ22 链表中倒数最后k个结点
输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。数据范围:0 \le n \le 50000≤n≤5000,数组中每个数的值 0 \le val \le 100000≤val≤10000要求:时间复杂度 O(n)O(n),空间复杂度 O(n)O(n)进阶:时间复杂度 O(n^2)O(n2),空间复杂度 O(1)O(1)方法一:快慢指针,不难,考虑一下特殊情况原创 2022-03-24 18:54:26 · 70 阅读 · 0 评论 -
JZ18 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.此题对比原题有改动2.题目保证链表中节点的值互不相同3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点数据范围:0<=链表节点值<=100000<=链表长度<=10000方法一:简单哈,先哑节点不多说了class Solution {public: ListNode* de..原创 2022-03-23 21:12:34 · 74 阅读 · 0 评论 -
JZ6 从尾到头打印链表
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]0 <= 链表长度 <= 10000方法一:正序遍历一遍链表用栈stack储存,利用栈的FILO性质class Solution {public:vector<int> printListFromTailToHead(ListNode* head) {vector<int&g...原创 2022-03-21 15:30:34 · 629 阅读 · 0 评论 -
每日一题6
请你设计并实现一个满足LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类:LRUCache(int capacity) 以 正整数 作为容量capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value)如果关键字key 已经存在,则变更其数据值value ;如果不存在,则向缓存中插入该组key-value 。如果插入操作导致关键...原创 2022-03-16 16:01:58 · 404 阅读 · 0 评论 -
每日一题3
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。方法一:自己的暴力解法,用时似乎还不错,(不算太暴力?)classSolution{public:ListNode*addTwoNumbers(ListNode*l1,ListNode*l2){intn1=0;...原创 2022-03-15 14:15:03 · 1353 阅读 · 0 评论 -
数据结构每日一题18
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。方法一:迭代法,挺简单的classSolution{public:ListNode*deleteDuplicates(ListNode*head){if(!head){returnhead;}ListNode*cur=head;while(cur->...原创 2022-03-10 14:36:19 · 176 阅读 · 0 评论 -
数据结构每日一题17
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。方法一:反转链表首先想到用一个栈存储链表里的val,利用栈FILO的特性,再遍历一次链表即可完成反转,O(N)的复杂度classSolution{public:ListNode*reverseList(ListNode*head){if(head==NULL){returnhead;}ListNode*pre=...原创 2022-03-10 14:18:59 · 96 阅读 · 0 评论 -
数据结构每日一题16
给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回新的头节点。方法一:递归classSolution{public:ListNode*removeElements(ListNode*head,intval){if(head==NULL){returnhead;}head->next=remov...原创 2022-03-10 13:59:56 · 159 阅读 · 0 评论 -
数据结构每日一题15
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。方法一:先创建一个哑节点,用一个指针始终指着,再创建一个节点pre指向这个哑节点。比较l1和l2的大小,将pre的next指向其中小的那个最后返回哑节点的nextclassSolution{public:ListNode*mergeTwoLists(ListNode*list1,ListNode*list2){if(list1==NULL){...原创 2022-03-09 17:30:05 · 91 阅读 · 0 评论 -
数据结构每日一题14
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。一。遍历一遍链表,用哈希表记录走过的节点,如果遇到节点在哈希表中已经存在,则返回true。classSolution..原创 2022-03-09 15:34:32 · 342 阅读 · 0 评论