首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Deep learning进阶路

    2-7 顺序表 和 链表 对比

    2-7 顺序表 和 链表 对比 1、存储结构的不同 虽然它们同属于线性表,但数据的存储结构有本质的不同: 顺序表存储数据,需预先申请一整块足够大的存储空间,然后将数据按照次序逐一存储,逻辑关系就是靠元素间物理空间上的邻接关系来维持 链表 ,什么时候存储数据,什么时候才申请存储空间,数据之间的逻辑关系依靠每个数据元素携带的指针维持, 2、空间利用率 顺序表的空间利用率显然要比链表高。 首先是链表每个结点不光有数据域,还有指针域。这就比顺序表多耗费一点空间。 链表在存储数据时,每次只新开辟一个node的空间,且位置是随机的,会产生很多空间碎片,一定程序上造成了空间浪费。 O(n); 第 2 类问题则适合使用链表链表中数据元素之间的逻辑关系靠的是节点之间的指针,当需要在链表中某处插入或删除节点时,只需改变相应节点的指针指向即可,不用大量移动元素,因此链表中插入、删除或移动数据所耗费的时间复杂度为 O(1);而顺序表中

    44720发布于 2019-07-02
  • 来自专栏Hank’s Blog

    2-7 R语言基础 数据框

    > df <- data.frame(id=c(1,2,3,4),name=c("a","b","c","d"),gender=c(TRUE,TRUE,FALSE,FALSE)) > nrow(df) #4行 [1] 4

    38920发布于 2020-09-16
  • 来自专栏嵌入式音视频

    2-7 输入圆的半径,计算其周长与面积

    预览图如下 #include<stdio.h> int main() { int r; printf("请输入r:"); scanf("%d",&r); { if(r>0) {printf("面积是:%f\n",3.14159*r*r); printf("周长是:%f\n",2*3.14159*r);} else printf("输入的r不合法!\n"); } return 0; }

    66330编辑于 2022-12-01
  • 来自专栏刷题笔记

    2-7 一元多项式求导 (20 分)

    本文链接:https://blog.csdn.net/shiliang97/article/details/101025651 2-7 一元多项式求导 (20 分) 设计函数求一元多项式的导数。

    84220发布于 2019-11-08
  • 来自专栏cwl_Java

    C++编程之美-数字之魅(代码清单2-7)

    代码清单2-7 int lowestOne(int N) { int Ret = 0; while(N) { N >>= 1; Ret

    23420编辑于 2022-11-30
  • 来自专栏算法与数据结构

    数据结构 单链表&顺序表

    链表头结点的作用: 总结为:  头结点的作用主要是使插入和删除等操作统一,在第一个元素之前插入元素和删除第一个结点不必另作判断。另外,不论链表是否为空,链表指针不变。   /*只含有一个节点的链表的有序链表。 顺序表代码汇总 2-7 设h为不带头结点的单向链表。 1-7 在顺序表上进行插入、删除操作时需要移动元素的个数与待插入或待删除元素的位置无关  错误: 假设原顺序表长度为n,在头节点插入(删除),需要移动n(n-1)个元素,尾节点不需要移动; 2-7 要将一个顺序表 min(m,n) 2-7 对于一个具有N个结点的单链表,在给定值为x的结点后插入一个新结点的时间复杂度为  ?

    2.9K111发布于 2018-01-03
  • 来自专栏嵌入式学习

    链表——新建链表

    #include <stdio.h> #include <stdlib.h> #include <string.h> struct node { int data; struct node *pNext; }; //新建node struct node * create_node(int data) { struct node *p = (struct node *) malloc (sizeof(struct node)); if(NULL == p) {

    1.7K40发布于 2020-09-07
  • 来自专栏csdn-nagiY

    【Leetcode】反转链表 合并链表 相交链表 链表的回文结构

    【Leetcode21】合并两个有序链表 1.链接 合并两个有序链表 2.题目再现 3.三指针尾插法 思路:创建一个新的链表,分别遍历两个链表,小的就尾插到新链表,然后指针向后走一步,直到有一方为空时就结束循环 ;结束循环后,判断哪个链表不为空,把不为空的尾插到新链表中去。 分表遍历两个链表,比较其值,小的尾插到新链表,并向后走一步(如果一样大,那么随便取哪一个都行); 4.结束循环后,判断哪个链表不为空,尾插到新链表。 【Leetcode160】相交链表 1.链接 相交链表 2.题目再现 3.解法 1.先分别遍历两个链表,记录下两个链表的长度; 2.如果两个链表尾节点的地址一样,则说明它们相交,否则不相交,(注意是地址不是值 ); 3.求出两个链表长度的差gap; 4.先让长的链表走差距步gap,短的链表先不动; 5.然后两个链表同时走一步,比较每走一步时两个链表当前节点的地址,如果一样,则说明找到了它们相交的起始位置

    41610编辑于 2024-01-23
  • 来自专栏学习

    链表篇》---相交链表

    题目链接 相交链表 方法一:哈希集合 判断两个链表是否相交。使用哈希集合存储链表节点。 创建一个哈希Set集合。先将链表A中的节点放入这个集合中。 再遍历链表B。 pA 从链表 headA 的头部开始遍历,pB 从链表 headB 的头部开始遍历。 如果 pA 到达了链表 headA 的末尾(pA == null),就让它跳到链表 headB 的头部继续遍历。 当 pA 到达链表headA的末尾时,pA 被重置为链表headB的头部,这是为了让 pA 开始遍历链表headB。 类似地,当 pB 到达链表headB的末尾时,pB 被重置为链表headA的头部。 通过这种方式,两个指针在遍历完自己的链表后,会从对方的链表头开始遍历。 由于两个指针都会遍历两个链表的总长度,无论两个链表的长度是否相同,最终两个指针会在相交节点处相遇,或者同时到达链表的末尾(即没有相交节点的情况)。

    31810编辑于 2024-10-24
  • 来自专栏嵌入式项目开发

    C语言-链表(单向链表、双向链表)

    ,而且链表的空间是存储在堆上面的,可以动态分配,释放。 链表的每个节点就是一个结构体变量,节点里有一个或者两个指针,可以保存上一个节点和下一个节点的地址,方便遍历链表,删除、插入节点时定位位置。 2. 实现的功能如下: 初始化链表头 插入节点的函数(链表任意位置插入,链表尾插入) 删除节点的函数(链表任意位置删除、链表尾删除) 遍历链表,输出链表里的所有信息 #include <stdio.h> #include 找到链表尾 while(next_p! 找到链表尾 if(head!

    3.3K41编辑于 2022-01-07
  • 来自专栏P_M_P学习笔记

    Leetcode:相交链表,环形链表,环形链表||

    相交链表 题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 思路: 先分别遍历两个链表,得出两个链表的节点个数和两个链表节点数的差,再创建两个指针指向两个链表,让节点数较多的链表的指针先遍历这个差值的节点数,然后两个指针再同时遍历,当两个指针指向的节点的地址相同时 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。

    47510编辑于 2024-01-20
  • 来自专栏P_M_P学习笔记

    【Leetcode】重排链表、旋转链表、反转链表||

    重排链表 题目描述 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln-1 提示: 链表的长度范围为 [1, 5 * 104] 1 <= node.val <= 1000 方法一: 将链表的每一个节点存在数组里,然后用下标访问的方式,交叉连接。 ,然后将中点后的链表翻转成一个新的链表,最后将这个新链表和原链表切割掉中间节点之后的链表合并成一个新的链表,合并方式是交叉合并。 题目描述 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表

    37610编辑于 2024-01-19
  • 来自专栏韩曙亮的移动开发专栏

    【数据结构】线性表 ② ( 链式存储结构 - 链表 | 链表分类 - 单链表链表 非循环链表 循环链表 | 链表优缺点 )

    一、链式存储结构 - 链表 链式存储结构 就是 链表 LinkedList ; 链式存储结构 ( 链表 ) : 数据 存储在 节点 中 , 每个节点包含 数据值 和 指向下一个节点的指针 ; 通过节点之间的指针关系 Object data; // 指向下一个节点 Node next; // 指向上一个节点 Node last; } 二、链表分类 - 单链表 / 双链表 / 非循环链表 / 循环链表链表 与 双链表 : 单链表 : 上述链表是 单链表 , 单链表 只有一个指针 指向下一个节点 ; 双链表 : 还有一种链表是 双链表 , 双链表 有两个指针 , 一个指向下一个节点 , 一个指向上一个节点 ; 循环链表 : 如果 最后一个节点的指针 指向 第一个节点 , 那么这个链表就是循环链表 ; 链表可以分为以下四类 : 单链表 单循环链表链表 双循环链表 三、链表优缺点 链表 LinkedList 链表 LinkedList 缺点: 查询 性能低 : 如果要访问 链表中 指定位置的元素 , 需要从头节点开始遍历到目标位置 , 时间复杂度为O(n)。

    84740编辑于 2023-10-11
  • 来自专栏学习

    链表篇》---反转链表

    题目链接 反转链表 方法一:迭代 循环从第二个节点开始。 首先判断若没节点head为null 或者 若只有一个节点。head.next = null。则返回head。 接下来 定义一个 cur 节点,指向链表的第二个节点。这个 cur 将用于遍历链表。 将当前 head 节点的 next 设为 null,因为它将成为反转链表的末尾节点。 之后 开始遍历链表并反转指针 1.ListNode curNext = cur.next; 保存cur.next的值,防止丢失。 2.cur.next = head 反转链表。 令cur.next指向前一个节点 3.head = cur 设置反转链表的头结点。 假设链表的其余部分已经被反转,现在应该如何反转它前面的部分?

    44310编辑于 2024-10-24
  • 来自专栏学习

    链表篇》---回文链表

    题目传送门 方法一:将值复制到数组中后用双指针法 思路: 1.将链表的值赋值到顺序表当中。 2.使用双指针法,判断顺序表中的值是否是回文。 left++; right--; } return true; } } 方法二:使用栈 思路: 1.先将链表中的值全部入栈 2.遍历链表,若链表元素与栈顶元素相等,则出栈。 3.栈最后为空,返回true。栈不为空返回false。 反转后半部分链表。 判断是否回文。 恢复链表。 返回结果。 isPalindrome(ListNode head) { if (head == null) { return true; } // 找到前半部分链表的尾节点并反转后半部分链表

    24810编辑于 2025-05-31
  • 来自专栏X

    Leetcode|找单链表中点+链表反转+链表合并|143. 重排链表

    1 寻找单链表中点 + 链表反转 + 链表合并 这道题是道综合题,把三个知识点串起来,非常适合复习链表处理的三个技巧 【思路】:观察发现可以把链表后一半进行反转,然后当成两个链表的合并任务即可 class head) return; // 1.寻找链表中点(快慢指针) auto premid = findmid(head); // 2.链表反转(pre/cur auto l1 = head; auto l2 = premid->next; premid->next = nullptr; // 3.链表合并 (先保存next然后穿针引线) merge(l1, l2); } // 合并链表 void merge(ListNode* l1, ListNode* l2) { while (l1 && l2) { // 先保存两个链表的next auto l1next = l1->next; auto l2next

    63430编辑于 2022-01-10
  • 来自专栏学习

    链表篇》---环形链表

    22200编辑于 2025-05-31
  • 来自专栏码匠的流水账

    leetcode链表之反转链表

    序 本文主要记录一下leetcode链表之反转链表 题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

    69720发布于 2020-09-14
  • 来自专栏c++与qt学习

    清空链表和销毁链表

    清空链表和销毁链表的区别: 清空链表:将所有除头节点以外的存放有数据的节点释放掉 销毁链表:将包括头结点在内的所有节点释放掉 注意:当清空所有有数据的节点,并且释放头结点后,该链表就无法再通过头结点创建 ,访问,插入,删除节点,因此相当于销毁了此链表 清空链表 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef struct LinkNode { int num; LinkNode* next; }Lk, * lk; //有头链表的初始化 lk initLinkNode() { //创建头结点 lk 注意:清空链表后,链表还是可以继续使用 ? 画图说明: ? 注意销毁链表后,就不能对链表进行任何操作,否则为访问权限冲突,因为头结点指向的内存的操作权限已经归还给了操作系统 ? 画图说明: ?

    3.1K10发布于 2021-03-02
  • 来自专栏全栈程序员必看

    环形链表(链表)

    给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回 true 。 否则,返回 false 。 进阶: 你能用 O(1)(即,常量)内存解决此问题吗? 示例 3: 输入:head = [1], pos = -1 输出:false 解释:链表中没有环。 提示: 链表中节点的数目范围是 [0, 104] -105 <= Node.val <= 105 pos 为 -1 或者链表中的一个 有效索引 。

    47930编辑于 2022-09-22
领券