[转]浅析线性表(链表)的头插法和尾插法的区别及优缺点
摘要:浅析线性表(链表)的头插法和尾插法的区别及优缺点 线性表作为数据结构中比较重要的一种,具有操作效率高、内存利用率高、结构简单、使用方便等特点,今天我们一起交流一下单向线性表的头插法和尾插法的区别及优缺点 线性表因为每个元素都包含一个指向下一元素的指针,所以新增、删除、修改起来非常简单迅速 就像火车一
阅读全文
posted @
2021-10-21 17:05
桌子哥
阅读(972)
推荐(0) 编辑
Leetcode练习(Python):链表类:第25题:K 个一组翻转链表:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
摘要:题目: K 个一组翻转链表:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->
阅读全文
posted @
2020-05-03 23:12
桌子哥
阅读(433)
推荐(0) 编辑
Leetcode练习(Python):链表类:第109题:有序链表转换二叉搜索树:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
摘要:题目: 有序链表转换二叉搜索树:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 思路: 看到二叉树要想到用递归的思想,为了找到根节点,使用双指针法,快指针是慢指针速度的二倍,快指针到
阅读全文
posted @
2020-05-03 21:24
桌子哥
阅读(690)
推荐(0) 编辑
Leetcode练习(Python):链表类:第23题:合并K个排序链表:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
摘要:题目: 合并K个排序链表:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 思路: 暴力法 程序: # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.va
阅读全文
posted @
2020-05-03 17:29
桌子哥
阅读(314)
推荐(0) 编辑
Leetcode练习(Python):链表类:第148题:排序链表:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
摘要:题目: 排序链表:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 思路: 看到时间复杂度为 O(n log n) ,想到使用二分法,但是在链表里的二分法还没有想到思路,先使用懒人方法做一下,竟然通过了,哈哈哈,万万没想到,之后再补按照要求的程序。 程序1:这个程序是不符合
阅读全文
posted @
2020-05-03 16:47
桌子哥
阅读(361)
推荐(0) 编辑
Leetcode练习(Python):链表类:第147题:对链表进行插入排序:插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 重复直到所有输入数据插入完为止。
摘要:题目: 对链表进行插入排序:插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 重复直到所有输入数据插入完为止。 思路: 使用数组,也属于懒人做法,最后使用尾插
阅读全文
posted @
2020-05-03 16:23
桌子哥
阅读(355)
推荐(0) 编辑
Leetcode练习(Python):链表类:第143题:重排链表:给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
摘要:题目: 重排链表:给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 思路: 使用了懒人做法,使用了栈,应该还有更好的方法,想到后做补充。 程序: # Defin
阅读全文
posted @
2020-05-03 11:09
桌子哥
阅读(901)
推荐(0) 编辑
Leetcode练习(Python):链表类:第92题:反转链表 II:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
摘要:题目: 反转链表 II:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明:1 ≤ m ≤ n ≤ 链表长度。 示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->
阅读全文
posted @
2020-05-02 22:21
桌子哥
阅读(421)
推荐(0) 编辑
Leetcode练习(Python):链表类:第86题:分隔链表:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。
摘要:题目: 分隔链表:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 思路: 要保证相对位置不变,使用尾插法。再使用两个空链表,一个存放小于x的,一个存放大于等于x的,然后组合。 程序: # Defin
阅读全文
posted @
2020-05-02 19:14
桌子哥
阅读(506)
推荐(0) 编辑
Leetcode练习(python):链表类:第82题:删除排序链表中的重复元素 II:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
摘要:题目: 删除排序链表中的重复元素 II:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。 思路: 懒人思维,使用哈希表。 程序: # Definition for singly-linked list. # class ListNode: # def __ini
阅读全文
posted @
2020-05-02 17:22
桌子哥
阅读(545)
推荐(0) 编辑
Leetcode练习(Python):链表类:第61题:旋转链表:给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
摘要:题目: 旋转链表:给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。 思路: 将链表成环进行旋转,对于K,需要判断数目,使用超过了链表的长度。 程序: # Definition for singly-linked list. # class ListNode: # de
阅读全文
posted @
2020-05-01 17:43
桌子哥
阅读(714)
推荐(0) 编辑
Leetcode练习(Python):链表类:第237题:删除链表中的节点:请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
摘要:题目: 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 -- head = [4,5,1,9],它可以表示为: 说明: 链表至少包含两个节点。 链表中所有节点的值都是唯一的。 给定的节点为非末尾节点并且一定是链表中的一个有效节点。 不要从你的
阅读全文
posted @
2020-05-01 17:13
桌子哥
阅读(375)
推荐(0) 编辑
Leetcode练习(Python):链表类:第234题:回文链表:请判断一个链表是否为回文链表。
摘要:题目: 回文链表:请判断一个链表是否为回文链表。 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 思路: 利用栈的性质来判断很方便,但是空间复杂度为O(n)。 想一想空间复杂度为O(1) 的方法,之后补充。 程序1: # Definition for singly-linke
阅读全文
posted @
2020-05-01 16:30
桌子哥
阅读(438)
推荐(0) 编辑
Leetcode练习(Python):链表类:第206题:反转链表:反转一个单链表。
摘要:题目: 反转链表:反转一个单链表。 进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 思路: 思路一:使用栈的思想。 思路二:使用迭代。 思路三:使用递归。 程序1: # Definition for singly-linked list. # class ListNode: # de
阅读全文
posted @
2020-05-01 15:17
桌子哥
阅读(258)
推荐(0) 编辑
Leetcode练习(Python):链表类:第203题:移除链表元素:删除链表中等于给定值 val 的所有节点。
摘要:题目: 移除链表元素:删除链表中等于给定值 val 的所有节点。 思路: 链表的常规题,练过好多次了,双指针,哨兵节点防止头结点被是目标节点。 程序: # Definition for singly-linked list. # class ListNode: # def __init__(self
阅读全文
posted @
2020-05-01 14:45
桌子哥
阅读(329)
推荐(0) 编辑
Leetcode练习(Python):链表类:第160题:相交链表:编写一个程序,找到两个单链表相交的起始节点。
摘要:题目: 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 思路: 看了一下想到了使用哈希表,这个很方便,肯定还有其他的方法,之后再补充。 程序: # Definition for singly-linked list. # class ListNode: #
阅读全文
posted @
2020-05-01 14:32
桌子哥
阅读(497)
推荐(0) 编辑
Leetcode练习(Python):链表类:第141题:环形链表:给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
摘要:题目: 环形链表:给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 思路: 双指针 程序: # Definition for singly-linked list. #
阅读全文
posted @
2020-05-01 14:17
桌子哥
阅读(339)
推荐(0) 编辑
Leetcode练习(Python):链表类:第83题:删除排序链表中的重复元素:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
摘要:题目: 删除排序链表中的重复元素:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 思路: 双指针法。 程序1:暴力法,超时了 # Definition for singly-linked list. # class ListNode: # def __init__(self, x):
阅读全文
posted @
2020-05-01 14:10
桌子哥
阅读(541)
推荐(0) 编辑
Leetcode练习(Python):链表类:第21题:合并两个有序链表:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
摘要:题目: 合并两个有序链表:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 思路: 本题思路较简单。 程序: # Definition for singly-linked list. # class ListNode: # def __init__(sel
阅读全文
posted @
2020-04-30 23:28
桌子哥
阅读(1608)
推荐(0) 编辑