![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
链表
三少爷的剑!
从学生手上收来的资源整理并确认是否有用,如有雷同,纯属巧合。
展开
-
线性表中顺序表和链表的区别(数据结构基础回顾)(较全面)
顺序表和链表的区别:相同点: 1.都是线性表结构 2.元素逻辑存储上是连续的 3.每个元素都有唯一的前驱和唯一的后继(注意:首元素不存在前驱,尾元素不存在后继(循环链表除外))不同点: 1.底层存储空间不一样,顺序表底层存储空间是连续的,而链表则是不连续的。 2.插入和删除方式不同,顺序表任意位置进行插入和删除操作,需要搬运大量的元素,效率低,时...原创 2020-06-30 12:17:50 · 7162 阅读 · 0 评论 -
旋转链表(数据结构基础回顾)
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例 2:输入: 0->1->2-&g原创 2020-06-30 00:59:06 · 4065 阅读 · 0 评论 -
重排链表(数据结构基础回顾)
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.来源:力扣(LeetCode)链接:https:原创 2020-06-30 00:39:18 · 4087 阅读 · 0 评论 -
删除链表中的节点(实现的函数只给一个参数)(数据结构回顾)
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 -- head = [4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], node = 1输出: [4,5,9]解释: 给定你链.原创 2020-06-29 23:49:12 · 4197 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点(数据结构基础回顾)
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函原创 2020-06-29 23:35:21 · 4033 阅读 · 0 评论 -
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null(数据结构基础回顾)
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos.原创 2020-06-28 10:26:22 · 4369 阅读 · 0 评论 -
给定一个链表,判断链表中是否有环(数据结构基础回顾)
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:输入:head = [1], pos.原创 2020-06-28 09:38:28 · 4146 阅读 · 0 评论 -
相交链表(数据结构基础回顾)
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为.原创 2020-06-28 00:37:11 · 4044 阅读 · 0 评论 -
链表分割(数据结构基础回顾)(链表)
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。定义两个链表,一个放大的,一个放小的,最后链接起来。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class P原创 2020-06-27 23:39:38 · 4043 阅读 · 0 评论 -
链表的回文结构(数据结构基础回顾)(链表)(简单易懂)
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。众所周知,如果这题把链表换成数组来检测会非常简单,这题我采用的是取巧的方法,由于题设告诉你链表长度小于等于900。那么我就定义一个长度为900的数组,既符合了空间复杂度O(1),又能把所有的节点的值装进数组中。当然有的题目没有告诉你链表的长度,你就要自己运用反转单链表和遍历来做,相对来说,比较麻烦。原创 2020-06-27 23:19:18 · 4047 阅读 · 0 评论 -
合并两个有序链表(c/c++)(数据结构基础回顾)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} *原创 2020-06-27 14:22:56 · 4402 阅读 · 0 评论 -
反转链表(遍历法)(数据结构基础回顾)
反转一个单链表。我的想法是定义三个,前,中,后,节点。不断的更改节点的指向,三个节点并不断的向后移位,最终遍历完成。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: Lis原创 2020-06-26 21:40:27 · 4013 阅读 · 0 评论 -
移除链表元素(C++,数据结构链表回顾)
删除链表中等于给定值val的所有节点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* removeElements(ListNode* head, i...原创 2020-06-26 20:58:16 · 4366 阅读 · 0 评论 -
链表中倒数第k个节点(基础数据结构回顾)
输入一个链表,输出该链表中倒数第k个结点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead==nullptr)原创 2020-06-20 20:50:31 · 3987 阅读 · 0 评论 -
链表的中间结点(一快一满双指针,数据结构基础回顾)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* middleNode(ListNode* head) { if(head==nullptr)...原创 2020-06-20 20:20:46 · 3982 阅读 · 0 评论