通过源码可以看出 使用 CAS + synchronized 方式时 加锁的对象是每个链条的头结点,也就是 锁定 的是冲突的链表,所以再次提高了并发度,并发度等于链表的条数或者说 桶的数量。那为什么sement 不把段的大小设置为一个桶的,因为在高并发的情况下如果 ReentrantLock 发生冲 ...
分类:
其他好文 时间:
2020-02-20 13:27:46
阅读次数:
108
题意 删除链表的倒数第$n$个结点,返回链表的头结点。 思路 想法1:一趟扫描确定表长,第二趟删除第 个元素。时间复杂度:$O(n)$。 想法2:题目中问能否尝试使用一次扫描实现,思考一下。用两个指针就可以了,当前面的指针指向第$n$个元素时,后面的指针开始移动,这样他俩之间始终差$n$个元素,前面 ...
分类:
其他好文 时间:
2020-02-19 21:16:05
阅读次数:
98
可能会把头结点删掉的问题,都会定义一个虚拟头节点 p:上一次保留节点的最后一个位置q:下一段的第一个节点,用来把下一段全部扫描结束 ,只要相同q就一直向后走。p到q为一段 本次用来3个节点,一个虚拟节点,另外的p、q用来遍历是否存在重复节点。 /** * Definition for singly- ...
分类:
其他好文 时间:
2020-02-13 17:31:16
阅读次数:
74
有一种存储英文单词的方法,是把单词的所有字母串在一个单链表上。为了节省一点空间,如果有两个单词有同样的后缀,就让它们共享这个后缀。下图给出了单词“loading”和“being”的存储形式。本题要求你找出两个链表的公共后缀。 函数接口定义: PtrToNode Suffix( List L1, Li ...
分类:
其他好文 时间:
2020-02-13 11:17:51
阅读次数:
269
完全二叉树是每一层(除最后一层外)都是完全填充(即,结点数达到最大)的,并且所有的结点都尽可能地集中在左侧。 设计一个用完全二叉树初始化的数据结构 CBTInserter,它支持以下几种操作: CBTInserter(TreeNode root) 使用头结点为 root 的给定树初始化该数据结构; ...
分类:
其他好文 时间:
2020-02-12 13:11:39
阅读次数:
53
题目地址 链表部分反转 憨比解法,找到反转段的pre,反转中间段的同时记录尾节点,再接上后面一段 优秀解法,中间段的反转用头插法的思路 注意用个dummy头结点会比较方便处理边界 code1 code2 ...
分类:
其他好文 时间:
2020-02-11 19:30:21
阅读次数:
75
/* * @Issue: 已知head指向带头结点的单向链表,链表中每个结点抱哈字符型数据域(data)和指针域(next),编写程序 * 实现在值为a的结点前插入值为key的结点,若没有值为a的结点,则插入在链表最后 * @Author: 一届书生 * @LastEditTime : 2020-0 ...
分类:
其他好文 时间:
2020-02-11 11:52:03
阅读次数:
51
/* * @Issue: 建立一个有头结点的单向链表,链表结点中数据通过键盘输入,输入到-1结束,头结点不放数据 * @Author: 一届书生 * @LastEditTime : 2020-02-09 10:27:10 */ #include<iostream> using namespace s ...
分类:
其他好文 时间:
2020-02-09 11:56:53
阅读次数:
71
一、栈stack 1. 是后进先出的数据结构 2. 栈顶指针指的始终是栈最上方元素的一个标记,即放在最上面的元素。栈顶元素为空时令top为 1. 3. 在使用pop()函数和top()函数时,需要使用empty()判断栈是否为空。 4. 在STL中stack容器来编写代码,STL定义stack的复杂 ...
分类:
其他好文 时间:
2020-02-02 21:29:17
阅读次数:
73
链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的 深拷贝。 我们用一个由 n 个节点组成的链表来表示输入/ ...
分类:
其他好文 时间:
2020-02-01 00:58:26
阅读次数:
132