
链表
链表日常练习
YXXYX
精通CV编程
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构解析——小白也能看懂的单链表
引言单链表在数据结构中是很重要的一种线性结构,它是单向的,有着非常广泛的应用领域;虽然现在很多语言中都有封装好的链表类型可以直接使用,但是自己能写一个链表并实现基本操作是至关重要的;接下来我将用代码展示单链表的创建和一些基本操作;注:以下代码仅供参考,并不一定是最优代码,只是想让各位了解单链表如何进行的一些基本操作;单链表的结构单链表就是由一个一个节点组成,这个节点由一个数据域和指针域组成;如图:所以,我们需要先创建节点结构,然后才能依次组成单链表;注:以下链表的数据域的数据类型都是int原创 2021-10-24 10:44:14 · 788 阅读 · 18 评论 -
剑指 Offer 22. 链表中倒数第k个节点(C语言)
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.这道题只需要定义一个快指针来先跑k个节点,然后头指针开始和快指针一起跑,直到快指针跑到链表结束(NULL),则头指针刚好跑到倒数第k个位原创 2021-04-08 23:48:17 · 329 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表(C语言)
*输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000*这道题简单来说就是通过一个动态分配的数组存入逆序的链表;有了大致思路就很简单了,第一步先要确定需要分配的数组大小,即求出链表长度len,代码如下 int len=0; struct ListNode *p=head; while(p!=NULL) {原创 2021-04-09 00:08:08 · 343 阅读 · 4 评论 -
237. 删除链表中的节点(C语言)
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – 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]解释:给定你链表中值为 1 的第原创 2021-04-09 00:30:51 · 1849 阅读 · 0 评论 -
剑指 Offer 24. 反转链表(C语言)
**定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000**这道题可以通过两个一前一后的指针来实现;先定义一个指针p和head一样指向第一个节点,然后再定义一个指向NULL的指针q位于p的后面,也就是head的前面,让p指向的节点的指针域反过来指向q,p不断向前移动直到原创 2021-04-09 16:30:19 · 324 阅读 · 2 评论 -
876. 链表的中间结点(C语言)
**给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next =原创 2021-04-09 17:56:28 · 807 阅读 · 0 评论 -
剑指 Offer 52. 两个链表的第一个公共节点(C语言)
*输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 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 为 [5,0,原创 2021-04-10 09:15:07 · 324 阅读 · 0 评论 -
21. 合并两个有序链表(C语言)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列这道题我看了力扣的官方解原创 2021-04-10 11:27:41 · 1468 阅读 · 0 评论 -
203. 移除链表元素(C语言)
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]提示:列表中的节点在范围 [0, 104] 内1 <= Node.val <= 500原创 2021-04-17 22:28:34 · 622 阅读 · 0 评论 -
约瑟夫问题
题目描述n 个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1 开始报数,到m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰 n-1 名小朋友,而该题是全部出圈。输入格式输入两个整数 n,m;输出格式输出一行 n 个整数,按顺序输出每个出圈人的编号。输入输出样例输入:10 3输出:3 6 9 2 7 1 8 5 10 4说明/提示,n<=100;m>=1;这道原创 2021-05-09 18:05:21 · 329 阅读 · 0 评论 -
环形链表。
给定一个链表,判断链表中是否有环。如果链表中存在环,则返回 true 。 否则,返回 false 。思路:定义快慢指针,快指针一次走两个节点,慢指针一次走一个节点,若链表中有环形链表,则快指针一定会与慢指针相遇。注意:该题的快慢指针开始并没有在一个起点,是为了满足while的条件。/* * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; *原创 2021-05-15 16:49:05 · 179 阅读 · 0 评论 -
回文链表。
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true方法一:1.找到中间节点(快慢指针,快走二,慢走一,最后慢为中间节点位置)2.中间节点之后的链表反转(前一个节点指针域指向后一个节点)3.前半部分链表和后半部分反转的链表比较4.后半部分反转的链表回归原样(因为通过函数对链表操作最好不要修改原链表结构)//判断一个链表是否为回文链表/* * Definition for sing原创 2021-05-15 19:07:30 · 137 阅读 · 0 评论 -
移除重复节点
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解决?思路:哈希表略;这里可以设置两个循环,依此遍历删除重复节点,内循环删除了重复节点后外循环也随之改变,直到全部去重完成;//移除未排序链表中的重复节点。保留最开始出现原创 2021-05-15 20:44:59 · 189 阅读 · 0 评论 -
后缀表达式
题目描述所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。输入格式输入:后缀表达式输出格式输出:表达式的值输入输出样例输入3.5.2.-*7.+@输出16说明/提示字符串长度,1000内。这道题是一道典型的栈类型的题,思路很简单,就是将每个’.'之前的原创 2021-05-22 11:53:52 · 455 阅读 · 0 评论 -
队列化栈&&栈化队列(力扣)
用队列实现栈请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、原创 2021-06-09 21:03:56 · 192 阅读 · 0 评论