[TOC] 归并排序思路 1)找到单链表中间节点,从而将原链表分为左右两部分; 2)对左右两部分链表分别进行归并排序,并合并左右两部分; 3)分别对两部分重复上述操作,直到所有元素都已排序成功。 因为单链表只能从链表头节点向后遍历,第一步操作用快慢指针找链表中点的时间复杂度就为O(n)。由于之后都是 ...
分类:
编程语言 时间:
2020-05-16 00:44:59
阅读次数:
82
[toc] 快速排序思路: 1)选定一个基准元素; 2)经过一趟排序,将所有元素分成两部分; 3)分别对两部分重复上述操作,直到所有元素都已排序成功。 因为单链表只能从链表头节点向后遍历,没有prev指针,因此必须选择头节点作为基准元素。这样第二步操作的时间复杂度就为O(n)。由于之后都是分别对两部 ...
分类:
编程语言 时间:
2020-05-16 00:31:26
阅读次数:
76
单向循环链表的操作 length()返回链表的长度 思路:当头节点为空的时候,直接返回0 其它情况下,先确定循环条件,之前单链表的cur != None这一条件不适用于此,因为最后一个节点会指向头节点,即此时是cur.next==self.__head 而cur==self.__head同样不可取, ...
分类:
其他好文 时间:
2020-05-14 11:11:44
阅读次数:
80
单向循环链表的操作 travel() 遍历链表中所有元素 思路:跟之前的单链表一样,循环输出即可;要注意的是最后一个节点时,此时cur.next指向头节点,而没有进入循环,而cur指向该节点,跳出循环后,单独把最后一个节点的元素打印出来就可以了(当链表中只有一个元素,也可以处理) 注意:同时也要考虑 ...
分类:
其他好文 时间:
2020-05-14 10:30:51
阅读次数:
64
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 限制: 0 arr = new ArrayList(); public int[] reversePrint(ListNode head) { helper(head); int[] ans = new int[arr ...
分类:
其他好文 时间:
2020-05-13 23:15:25
阅读次数:
53
二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求值的顺序保持不变,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。 返回转换后的单向链表的头节点。 注意:本题相对原题稍作改动 示例: 输入: [4 ...
分类:
其他好文 时间:
2020-05-03 14:28:06
阅读次数:
83
迭代法 思路: 当L1和L2都不是空链表时,判断L1和L2哪一个链表的头节点的值更小,将较小值的节点添加到结果里。当一个节点添加到结果里后,将对应链表中的节点向后移一位。 代码: # Definition for singly-linked list. # class ListNode: # def ...
分类:
其他好文 时间:
2020-05-03 12:57:09
阅读次数:
49
我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 面试题06. 从尾到头打印链表 题目 输入一个链表的头节点,从 ...
分类:
其他好文 时间:
2020-05-02 20:41:15
阅读次数:
63
上一篇我们介绍了ConcurrentHashMap的主干方法,本篇是ConcurrentHashMap的终篇,我们主要针对它的元素统计,扩容,元素迁移等做讲解。首先我们回顾一下前面章节,普通节点Hash为key的hash;树节点为TreeBin内部封装红黑树头节点,并且维护树,TreeBin的Has... ...
分类:
其他好文 时间:
2020-05-02 15:09:04
阅读次数:
58
题目: 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。 示例: 给定一个链表: 1->2->3->4->5, 和 ...
分类:
其他好文 时间:
2020-05-01 17:09:19
阅读次数:
57