
c++链表
c++
Crystal_Coding
这个作者很懒,什么都没留下…
展开
-
leetcode147. 对链表进行插入排序
文章目录题目:147. 对链表进行插入排序基本思想:前插法题目:147. 对链表进行插入排序对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插原创 2020-11-20 10:04:31 · 172 阅读 · 0 评论 -
leetcode328. 奇偶链表
文章目录题目:328. 奇偶链表基本思想:一次遍历题目:328. 奇偶链表给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例原创 2020-11-13 09:16:56 · 129 阅读 · 0 评论 -
leetcode143. 重排链表
文章目录题目:143. 重排链表基本思想:原地操作,每次寻找最后一个节点题目:143. 重排链表给定一个单链表 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原创 2020-10-20 21:24:43 · 109 阅读 · 0 评论 -
广联达笔试第三题0909/数组中按照一定规则删除重复元素
题目描述:我们希望一个序列中的元素是各不相同的,但是理想和现实往往是有差距的。现在给出一个序列A,其中难免有些相同的元素,现在提供了一种变化方式,使得经过若干次操作后一定可以得到一个元素各不相同的序列。这个操作是这样的,令x为序列中最小的有重复的数字,你需要删除序列左数第一个x,并把第二个x替换为2*x。请你输出最终的序列。例如原序列是[2,2,1,1,1],一次变换后变为[2,2,2,1],两次变换后变为[4,2,1],变换结束输入描述输入第一行包含一个正整数n,表示序列的长度为n。(1<原创 2020-09-10 21:23:06 · 590 阅读 · 0 评论 -
leetcode面试题 02.01. 移除重复节点
文章目录题目:leetcode面试题 02.01. 移除重复节点基本思想1:哈希表基本思想2:两重循环,保证空间复杂度为O(1),时间换空间题目:leetcode面试题 02.01. 移除重复节点编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2] 输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。原创 2020-06-26 09:11:22 · 251 阅读 · 0 评论 -
AcWing 1451. 单链表快速排序
完整代码采用快排实现链表的排序,比较难处理的地方是如何实现分隔,由于链表只能从前往后遍历不能从后往前遍历,那么常规的分隔方法(最左边的元素为基准,两个指针一个指向最左边,一个指向最右边。先从右往左判断,右指针停在比基准小的元素,将此元素放在左指针指示的位置,再从左往右判断,将左指针停在比基准大的元素,将此元素放在右指针指示的位置。直到左指针不再小于右指针,停止判断,该位置就是基准)...原创 2020-05-07 15:17:43 · 270 阅读 · 0 评论 -
leetcode876. 链表的中间结点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.v...原创 2020-03-23 17:58:05 · 161 阅读 · 0 评论 -
leetcode234.回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-linked-list著...原创 2020-02-25 10:11:57 · 261 阅读 · 0 评论 -
leetcode160.相交链表
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 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 (注意,如...原创 2020-02-13 14:34:08 · 107 阅读 · 0 评论 -
leetcode142.环形链表II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:...原创 2020-02-09 17:25:04 · 117 阅读 · 0 评论 -
leetcode141.环形链表
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true...原创 2020-02-08 14:48:33 · 122 阅读 · 0 评论 -
leetcode148.排序链表/快排,归并排序
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5来源:力扣(LeetCode)链接:https://leetcode-cn...原创 2020-02-08 10:50:42 · 252 阅读 · 0 评论 -
leetcode25.K个一组翻转链表/翻转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2-&g...原创 2019-12-31 20:55:31 · 271 阅读 · 0 评论 -
leetcode24.两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs著作权归领扣网络所有...原创 2019-12-28 19:29:05 · 134 阅读 · 0 评论 -
leetcode23.合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-k...原创 2019-12-26 21:11:18 · 147 阅读 · 0 评论 -
leetcode19.删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove...原创 2019-12-24 20:45:55 · 145 阅读 · 0 评论 -
剑指offer18.删除链表中重复的节点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5完整代码首先,找到链表中的重复的节点,对重复的节点进行标记;然后,将链表中被标记的节点删除。/*struct ListNode { int val; ...原创 2019-11-03 19:28:47 · 105 阅读 · 0 评论 -
剑指offer52.两个链表的第一个公共节点
题目描述输入两个链表,找出它们的第一个公共结点。完整代码分别遍历两个链表,计算链表的长度,从长链表去掉开始节点后和短链表长度相等的那个节点开始比较。#include<bits/stdc++.h>using namespace std;typedef struct ListNode{ int val; ListNode* next; ListNod...原创 2019-11-02 17:58:21 · 109 阅读 · 0 评论 -
剑指offer35.复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)完整代码刚开始看题时还有点摸不着头脑,感觉这道题没有任何存在的意义。后来看了大家的讨论才明白。思想:复制后的链表不能利用原来链表的空间,需要申请一块新的空间,即使是NUL...原创 2019-11-02 10:19:17 · 116 阅读 · 0 评论 -
Leetcode25.合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。完整代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode...原创 2019-10-26 17:28:21 · 207 阅读 · 0 评论 -
剑指offer24.反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。完整代码借助栈来实现/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(Lis...原创 2019-10-26 17:04:11 · 99 阅读 · 0 评论 -
剑指offer——链表中倒数第k个节点
题目描述输入一个链表,输出该链表中倒数第k个结点。完整代码转化成正数第l(链表长度)-k+1个节点/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Fi...原创 2019-10-24 22:10:28 · 124 阅读 · 0 评论 -
leetcode83.删除排序链表中的重复元素
leetcode83.删除排序链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/...原创 2019-10-22 20:46:45 · 135 阅读 · 0 评论 -
剑指offer——从尾到头打印链表
题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。完整代码:#include<iostream>#include<vector>using namespace std;struct ListNode{ int val; ListNode* next; ListNode(int x):val(x),next(NULL){}};L...原创 2019-09-28 15:12:08 · 90 阅读 · 0 评论 -
c++创建链表
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}//初始化当前节点值为x,指针为空 };struct ListNode *creat(){ //head用来标记链表,p1总是用来指向新分配的内存空间, //p2用来指向尾节点,通过p2链入新...原创 2019-09-18 21:11:42 · 448 阅读 · 0 评论 -
Leetcode21.合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-sorted-lists完整代码:...原创 2019-09-26 21:19:21 · 160 阅读 · 0 评论