![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法----链表
sunlanchang
北京邮电大学-计算机硕士,sunlanchang@bupt.edu.cn
展开
-
LeetCode 143. 重排链表
Description给定一个单链表 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->2->4->3.来源:力扣(LeetCode)原创 2020-09-17 16:49:59 · 172 阅读 · 0 评论 -
LeetCode 48. 排序链表
Description在 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.com/problems/sort-list著作权归领扣网络所有。商业转载请联系官原创 2020-09-15 11:15:30 · 120 阅读 · 0 评论 -
LeetCode 2. 两数相加
Description给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:ht原创 2020-09-14 11:18:33 · 99 阅读 · 0 评论 -
LeetCode 234. 回文链表(迭代、递归)
Description请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: trueSolution 迭代def isPalindrome(self, head: ListNode) -> bool: vals = [] current_node = head while current_node is not None: vals.append(c原创 2020-09-10 17:01:22 · 233 阅读 · 0 评论 -
LeetCode 146. LRU缓存机制(双向链表+哈希表)
Description运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据...原创 2020-05-06 21:57:25 · 250 阅读 · 0 评论 -
LeetCode 23. 合并K个排序链表(优先队列或者归并)
Description合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6来源:力扣(LeetCode)链接:https://leetcode-cn.com/pro...原创 2020-04-30 20:41:51 · 246 阅读 · 0 评论 -
LeetCode 202. 快乐数(快慢指针判断环)
Description编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 ...原创 2020-04-30 20:02:03 · 287 阅读 · 0 评论 -
LeetCode 445. 两数相加 II
Description给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -&g...原创 2020-04-14 19:34:02 · 173 阅读 · 1 评论 -
LeetCode 876. 链表的中间结点(快慢指针)
Description给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = ...原创 2020-03-23 22:46:02 · 180 阅读 · 0 评论 -
剑指offer 删除链表中重复的结点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5Solution保留一个重复的节点:class ListNode: def __init__(self, x): self.val = x...原创 2019-08-30 16:36:49 · 155 阅读 · 0 评论 -
LeetCode 82. 删除排序链表中的重复元素 II
Description给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3来源:力扣(LeetCode)链接:https://...原创 2019-11-05 16:46:29 · 187 阅读 · 0 评论 -
LeetCode 83. 删除排序链表中的重复元素
Description给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。Solution设置头节点和next节点,这个题与删除所有重复元素的剑指offer的一个题目类似。# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = ...原创 2019-11-05 16:20:51 · 306 阅读 · 0 评论 -
LeetCode 142. 环形链表 II
Description给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-l...原创 2019-11-05 16:02:33 · 161 阅读 · 0 评论 -
LeetCode 141. 环形链表
Description给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-list-cycle著作权归领扣网络所有。商业转载请联系官方授权,非商业转...原创 2019-11-05 15:38:14 · 171 阅读 · 0 评论 -
LeetCode 160. 相交链表
Description编写一个程序,找到两个单链表相交的起始节点。Solution 1暴力法,遍历A链表的每一个节点在B链表中依次判断是否是公共节点。Solution 2hashmap,遍历A链表将每个节点保存在hashmap中,再遍历B链表每个节点判断是否在hashmap中出现过。Solution 3快慢指针class Solution(object): def getI...原创 2019-11-04 17:28:01 · 206 阅读 · 0 评论 -
剑指offer 两个链表的第一个公共结点
题目描述输入两个链表,找出它们的第一个公共结点。Solution双指针。class Solution: def FindFirstCommonNode(self, pHead1, pHead2): if pHead1 is None or pHead2 is None: return None h1, h2 = pHead1,...原创 2019-08-24 16:31:20 · 75 阅读 · 0 评论 -
LeetCode 21. 合并两个有序链表
Description将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-sorted...原创 2019-11-04 16:50:24 · 83 阅读 · 0 评论 -
剑指 offer 反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。Solution注意空链表,初始化,按照每个节点分析。# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返...原创 2019-08-15 16:36:23 · 66 阅读 · 0 评论 -
LeetCode 206. 反转链表
Description反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLSolution使用nextNode缓存下一个节点。# Definition for singly-linked list.# class ListNode:# def __...原创 2019-11-04 15:30:57 · 185 阅读 · 0 评论 -
剑指 offer 从尾到头打印链表
描述题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。Solution递归方法:class Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def __init__(self): self.res = [] def printListFromTailToHead(self, listNode): ...原创 2019-07-16 16:30:10 · 187 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第N个节点(双指针)
Description给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。Solution链表问题一定要增加头节点。# Definition for singl...原创 2019-10-31 15:36:57 · 189 阅读 · 0 评论 -
Leetcode 203. 移除链表元素
描述删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5Solution注意python中的and oclass Solution: def removeElements(self, head, val) : ...原创 2019-09-16 16:04:32 · 73 阅读 · 0 评论