
链表
「已注销」
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Leetcode 142. Linked List Cycle II
Leetcode 142. Linked List Cycle II地址:Leetcode 142. linked list Cycle II问题描述:检测链表是否存在环,是的话返回环入口,否则返回None.这道题有两个思路,一个是经典的快慢指针的思路,另外一个是利用hashMap来记住已经访问过的Node。思路一:检测到环的时候,令慢指针指向head,然后fast 和 slow指针皆...原创 2019-01-06 15:30:25 · 163 阅读 · 0 评论 -
Leetcode 23. Merge k Sorted List
题目描述:合并k个有序链表。题目链接:Leetcode 23. Merge k Sorted List思路就是调用合并两个有序链表的程序,不断调用直到最后但是这个算法复杂度貌似比较大。事实上一看这样有序的东西一般都是二分的思路,要么二分查找,要么二分定位合并,这里就是二分归并。但是我最喜欢的还是优先级队列的做法,维护一个各链表顶点的优先级队列,每次取出最小并压入取出的下一个节点。(美妙...原创 2019-02-27 12:54:18 · 209 阅读 · 0 评论 -
Leetcode 21. Merge Two Sorted Lists
题目描述:合并两个有序链表,返回一个新链表。题目链接:Leetcode 21. Merge Two Sorted Lists就是外排思想,最后考虑长度较长的一方,直接拼接原链,不用new LISTNODE。代码如下/** * Definition for singly-linked list. * public class ListNode { * int val; ...原创 2019-02-26 17:37:09 · 221 阅读 · 0 评论 -
Leetcode 19. Remove Nth Node From End of List
题目描述:删除从尾节点数其的第n个节点,并返回删除后的头结点。题目链接:Leetcode 19. Remove Nth Node From End of List链表的问题只要用快慢指针+翻转操作+成环重头跑,基本能解决,注意利用dummy等辅助指针指向下一个头呀之类的。这个题目让快指针先跑n次,然后快慢一起跑,当快指针到达结尾的时候,慢指针达到要删除节点的前一个节点。代码如下# ...原创 2019-02-24 17:08:40 · 148 阅读 · 0 评论 -
Leetcode 25. Reverse Nodes in k-Group
题目描述:就是在前一题翻转2个链表节点的题目上变成翻转k个位置。题目链接:Leetcode 25. Reverse Nodes in k-GroupExample:Given this linked list: 1->2->3->4->5For k = 2, you should return: 2->1->4->3->5For...原创 2019-02-27 16:35:46 · 211 阅读 · 0 评论 -
Leetcode 24. Swap Nodes in Pairs
题目描述:交换两两链表中的节点。题目链接:Leetcode 24. Swap Nodes in Pairs这个题目的难点在于要记录前面的信息,故建一个dummy结点来记录当前需要交换两个点的前驱。然后不断更新就可以了。代码如下/** * Definition for singly-linked list. * public class ListNode { * int ...原创 2019-02-27 15:20:35 · 149 阅读 · 0 评论 -
Leetcode 2. Add Two Numbers
题目描述:给定两个链表,返回链表相加的结果,head是个位数,链位是高位。题目链接:Leetcode 2. Add Two Numbers链表的操作真的很简单了,按照外部排的思想,设置carrier位,看是否需要进位,然后逐位相加,看是否需要进位。代码如下import java.util.Arrays;class Solution { public int[] twoSum...原创 2019-02-22 15:18:45 · 153 阅读 · 0 评论 -
Leetcode 876. Middle of the Linked List
问题描述:返回中间节点。链表的()题目链接:Leetcode 876. Middle of the Linked List快慢指针法,没有什么好说的。代码如下# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# ...原创 2019-01-22 11:59:49 · 122 阅读 · 0 评论 -
Leetcode 234. Palindrome Linked List
题目描述:判断一个链表是否为回文链表。题目链接:234. Palindrome Linked List要求O(1)空间,线性时间,那么想到一个快慢指针 然后记录前半段的val,然后利用slow向后逐个比较。栈,仍然占用了大量的空间。最重要的是,当还有fast的时候,但是没有fast.next代表逐个为奇数,于是slow还要向前移动一个,这时slow是没有人与之匹配的。想到异或有记忆功...原创 2019-01-22 11:45:31 · 132 阅读 · 0 评论 -
Leetcode 203. Remove Linked List Elements
题目描述:去除链表中值等于给定值得节点,返回一个链表。题目链接:Leetcode 203. Remove Linked List Elements思路:没啥好说的,断链操作。主要是val在第一个元素的时候考虑,快慢指针的条件是while p and p.next这个条件不错。这个逻辑还是比较凌乱,要是指示一个prev、一个dummy.next 会更好。# Definition fo...原创 2019-01-22 10:54:23 · 153 阅读 · 0 评论 -
LeetCode 148. Sort List
题目描述:完成链表的排序,在nlogn时间复杂度内,且只用常数空间。题目链接:148. Sort List这题思路要求要用nlogn的时间复杂度的算法去完成这个操作,其实选择也就那么多:1、快排2、堆排3、归并排序在数组上完成这三个操作其实都不太难,但在链表上有一定难度。快排要找到pivot然后比较交换,双向链表比较合适,堆排要放到数组建堆,不满足。归并排序,在数组的情况下需要建...原创 2019-01-07 15:49:05 · 139 阅读 · 0 评论 -
Leetcode 147. Insertion Sort List
问题描述:对链表进行插入排序,其效果如图。思路:跟在普通数组中的思路一样,但是唯一不同的就是数组移动元素的时间是线性的,但是链表断链、接链操作时间是常数时间,仍然需要扫描的线性时间。默认前面的是已经排好序的链表,只需要从头开始扫描,找到第一个比起大的元素,在其前方插入即可。核心:需要时刻记录最新的头节点,也可以指定一个指针,让其永远指向最新的头节点。代码实现如下:class Solu...原创 2019-01-07 14:23:18 · 125 阅读 · 0 评论 -
Leetcode 146. LRU Cache
问题描述:实现LRU缓存算法。题目来源:146. LRU Cache这个是一种缓存策略以及页面置换淘汰策略。简单的来说就是最近使用的不淘汰,最近没有使用的就要被淘汰。题目要求put\set都要实现常数时间的操作,则很容易想到利用哈希去做,但是如何来定义最远没有使用的呢?1、加时间戳(timestamp),但是这样维护时间戳排序的时候很麻烦,时间复杂度很高2、利用链表来维护当前的节点状...原创 2019-01-07 13:03:21 · 164 阅读 · 0 评论 -
Leetcode 143. Reorder List
Leetcode 143. Reorder List问题描述:给定一个链表,要求把最后一位插入到第二位、倒数第二位插入到第三位…链表问题很直接的思路就是断链、连链、暂存节点、暂存下个节点、快慢指针等操作。继承前面142的思路,这里用快慢指针找到链表的中位数(index)位置,中位数后面的数字都是需要前插的,然后先进行链表的翻转,再进行合并得到最后的结果。代码如下:class So...原创 2019-01-06 18:55:56 · 129 阅读 · 0 评论 -
Leetcode 92. Reverse Linked List II
题目描述:翻转一个链表的m到n位置,从第1开始数。题目链接:Leetcode 92. Reverse Linked List II代码如下思路:要是不想再次遍历来拼接的话,需要在开始来进行一个记录拼接部分的开头和结尾。/** * Definition for singly-linked list. * public class ListNode { * int val...原创 2019-04-11 22:27:43 · 224 阅读 · 0 评论