
LinkedList
链表
NLP_victor
这个作者很懒,什么都没留下…
展开
-
LeetCode147. 对链表进行插入排序(Python)
1、题目描述https://leetcode-cn.com/problems/insertion-sort-list/对链表进行插入排序。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 重复直到所有输入数据插入完为止。输入: -1->5->3->4->0输出: -1->0->3->4->52原创 2020-11-20 18:28:00 · 397 阅读 · 1 评论 -
LeetCode234. 回文链表(Python)
1、题目详解https://leetcode-cn.com/problems/palindrome-linked-list/请判断一个链表是否为回文链表。进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?输入: 1->2输出: false输入: 1->2->2->1输出: true2、代码描述找到前半部分链表的尾节点。快慢指针在一次遍历中找到。 反转后半部分链表。 判断是否回文。 比较两个部分的值,当后半部分到达末尾则比较完成..原创 2020-10-24 19:56:33 · 362 阅读 · 0 评论 -
LeetCode143. 重排链表(L0→Ln→L1→Ln-1)
1、题目描述https://leetcode-cn.com/problems/reorder-list/2、代码详解1 -> 2 -> 3 -> 4 -> 5 -> 6第一步,将链表平均分成两半1 -> 2 -> 34 -> 5 -> 6 第二步,将第二个链表逆序1 -> 2 -> 36 -> 5 -> 4 第三步,依次连接两个链表1 -> 6 -> 2 -> 5原创 2020-10-23 10:44:20 · 420 阅读 · 0 评论 -
链表-LeetCode138. 复制带随机指针的链表
1、题目描述https://leetcode-cn.com/problems/copy-list-with-random-pointer/给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。我们用一个由n个节点组成的链表来表示输入/输出中的链表。每个节点用一个[val, random_index]表示:val:一个表示Node.val的整数。 random_index:随机指针指向的节点索引(范围从0到n...原创 2020-08-03 22:14:16 · 353 阅读 · 0 评论 -
DFS-LeetCode114. 二叉树展开为链表
1、题目描述https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/给定一个二叉树,原地将它展开为一个单链表。2、代码详解# Definition for a binary tree node.class TreeNode(object): def __init__(self, val=0, left=None, right=None): self.val = val原创 2020-08-02 16:07:25 · 301 阅读 · 0 评论 -
LeetCode146. LRU缓存机制(哈希+双向链表)
1、题目描述https://leetcode-cn.com/problems/lru-cache/设计和实现一个LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。 写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新..原创 2020-07-18 22:41:28 · 322 阅读 · 0 评论 -
LeetCode83. 删除排序链表中的重复元素+82. 删除排序链表中的重复元素 II
83. 删除排序链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。输入: 1->1->2输出: 1->2输入: 1->1->2->3->3输出: 1->2->3因为已排序,代码很直观# Definition for singly-linked list.class ListNode(object): def __init__(self, x): self.val = x原创 2020-07-13 23:06:07 · 259 阅读 · 0 评论 -
链表-LeetCode21. 合并两个有序链表
1、题目描述https://leetcode-cn.com/problems/merge-two-sorted-lists/将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:1->2->4, 1->3->4输出:1->1->2->3->4->42、代码详解递归法# Definition for singly-linked list.class ListNode(obje...原创 2020-07-12 23:19:01 · 286 阅读 · 0 评论 -
LeetCode141. 环形链表+142. 环形链表 II
142. 环形链表 IIhttps://leetcode-cn.com/problems/linked-list-cycle-ii/给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。说明:不允许修改给定的链表。不用额外空间解决此题。代码详解第一阶段链表头部到链表入口 有 a个节点(不计链表入口节点), 链表环 有 b 个节点设两指针分别走了 f,s步f = 2s (f每轮走两步,s每轮走一步)① f = s + nb (多走n个环)②由...原创 2020-07-11 18:02:33 · 258 阅读 · 0 评论 -
LeetCode108. 将有序数组转换为二叉搜索树109. 有序链表转换二叉搜索树
1、题目描述https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树(BST)。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。2、代码详解附:此题提交时必须注释掉class TreeNode类法一:中序遍历,总是选择中间位置左边的数字作为根节点# Definition for .原创 2020-07-03 18:28:26 · 287 阅读 · 0 评论 -
链表-LeetCode148. 排序链表
1、题目描述在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。2、代码详解2.1 归并排序(常用)2.2 快速排序快速排序的最坏时间复杂度是 o(n*n),均摊复杂度才是 o(nlogn)。除非用 bfprt 等算法先进行轴心数选择,才可以降低最坏时间复杂度。要求:期望平均时间复杂度为 O(nlogn),期望额外空间复杂度为 O(logn)。 思考题: 如果只能改变链表结构,不能修改每个节点的val值该如何做呢?# Definition fo..原创 2020-06-16 23:06:56 · 282 阅读 · 0 评论 -
归并排序-LeetCode23. 合并K个排序链表
1、题目描述https://leetcode-cn.com/problems/merge-k-sorted-lists/合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。2、代码详解2.1、合并k个排序数组(分治)题目链接:https://www.lintcode.com/problem/merge-k-sorted-arrays/description# O(N log k) 的时间复杂度内完成: N 是所有数组包含的整数总数量。 k 是数组的个数。#..原创 2020-06-12 22:51:54 · 429 阅读 · 0 评论 -
链表-LeetCode24. 两两交换链表中的节点(Python)
'''输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL'''class ListNode(object): def __init__(self, x): self.val = x self.next = Noneclass Solutio...原创 2020-04-11 19:41:14 · 401 阅读 · 0 评论 -
22:链表中倒数第k个节点(剑指offer第2版)+ LeetCode19. 删除链表的倒数第N个节点
1、题目描述输入一个链表,输出该链表中倒数第k个结点。注意代码鲁棒性,三种特殊情况要考虑到如果在只希望一次遍历的情况下, 寻找倒数第k个结点, 可以设置两个指针第一个指针先往前走k-1步, 然后从第k步开始第二个指针指向头结点然后两个指针一起遍历当地一个指针指向尾节点的时候, 第二个指针正好指向倒数第k个结点推广: 寻找中间节点, 两个指针一起, 第一个指针每次走两步, 第...原创 2020-02-24 23:20:34 · 249 阅读 · 0 评论 -
力扣.206剑24.反转链表+92.反转从位置m到n的链表
21、调整数组顺序使奇数位位于偶数位前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。书上的解法:一个类似于快排的方法, 只是简单的满足了奇数在前,偶数在后, 奇数的顺序发生了改变# -*- coding:utf-8 -*-class Solution:...原创 2019-05-27 16:22:16 · 373 阅读 · 0 评论