链表
对leetcode中关于链表题目的学习记录
机智电丁
这个作者很懒,什么都没留下…
展开
-
链表的排序和分隔
1.问题描述:链表排序在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 :输入: 4->2->1->3输出: 1->2->3->42.算法描述2.1插入排序leetcode上是对链表插入排序这个题目在前面,结果我先做了链表的排序,结果就用了同一个算法,后面看题解才发现我自己漏了= _ =。算法其实很简单,就是从原先的链表中取出一个元素,根据节点的大小插入到一个新链表的准确位置。如动图所示: 代码如下:/** * 链表定义原创 2020-05-12 16:24:11 · 245 阅读 · 0 评论 -
反转,旋转链表
1.基础问题:反转整个链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?2.问题解法因为看到了进阶提示,所以我在开始就在思考用递归法求解:先设置两个指针,temp=head.next,next=temp.next;先翻转head和temp这两个节点,然后将next当成新链表的首节点进入递归翻转。即重原创 2020-05-11 15:51:47 · 179 阅读 · 0 评论 -
删除排序链表中的重复节点
1.基础问题给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 :输入: 1->1->2输出: 1->22.算法这里起初想法就是想着两个节点两个节点的比较以上述例子为例子。首先两个指针P和Q指向两个1,比较两个指针的值,发现相同;此时将Q所在的这一个节点断开,P指向的节点不变,将Q指向下一节点继续比较:直至Q指向链表末端:/** * 链表节点定义 * public class ListNode { * int val; * L原创 2020-05-10 15:30:46 · 368 阅读 · 0 评论 -
链表的翻转
1.基础问题:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.2.算法这个基础问题比较简单,具体解法利用分治法的思想,将相邻两个节点看成一组,组内进行交换,组间再串联起来就可以解决这个问题了。public class Solution24 { public ListNode swapPairs(ListNode h原创 2020-05-09 16:43:59 · 155 阅读 · 0 评论 -
合并多个有序链表
合并多个有序链表1.问题描述合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:A [1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->62.算法我起先的想法是先判断链表长度,如果链表长度K>3,则将链表A[1~K-1]的剩余...原创 2020-05-08 15:05:14 · 1805 阅读 · 0 评论 -
删除链表倒数第N个节点
删除链表倒数第N个节点1.问题给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.2.算法暴力破解法:先计算得出链表的长度M,然后将链表长度和所给倒数位置相减,即loc=M-n-1,得出删除节点的前一个节...原创 2020-05-07 14:40:48 · 204 阅读 · 0 评论 -
两个有序链表的合并
两个有序链表的合并两个有序链表的合并放假很久了,整个假期时不时就学点东西,但是又觉得没做出点啥,所以写点东西记录一下。问题两个简单有序链表如链表A:1->2->3,链表B:1->2->4,如何快速有效的合并在一起:算法暴力破解法 ,最简单的方法。即依次分别取出两个链表的一个元素进行比较,并用一个新的链表C来保存比较结果即可。时间复杂度即为链表的长度相加,为O(...原创 2020-05-06 14:36:27 · 463 阅读 · 0 评论