定义双向链表 双向链表只是在原来的单链表中加入了一个前驱指针,因此,在双链表中执行按值查找和循秩查找与单链表是相同的。但在插入和删除操作中和单链表有着较大的不同。此外双链表还能很方便的找到其前驱结点,因此,除了找到插入结点外,插入和删除结点的时间复杂度仅为$O(1)$。 双向链表的尾插法初始化: 双 ...
分类:
其他好文 时间:
2018-12-29 13:53:18
阅读次数:
151
0.目录 1. "删除结点的思路" 2. "Java代码实现" 2.1 "链表删除结点的实现" 2.2 "头结点怎么办" 2.3 "测试用例" 1.删除结点的思路 链表删除结点的意思就是给定一个值,把链表中与给定值相等的结点全部删除: 例如 ,删除给定值 2 ,变为: 删除的思路: 用一个previ ...
分类:
其他好文 时间:
2018-11-29 19:58:58
阅读次数:
197
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 思路: 定义三个指针, p扫描整个链表,定位到最后一个元素 q定位 倒数第n个元素 node 第n-1个元素 如上图,删除q结点使用 node.nex ...
分类:
其他好文 时间:
2018-11-21 00:17:09
阅读次数:
219
因为排序二叉树的有序性,建立与查询都不是很难,唯一的难点是删除结点的操作,删除节点且要保证该树仍为二叉树且仍满足有序的性质 二叉树的删除操作主要有三种情况: 所删除的节点是叶子节点,这样就可以先遍历这个树,然后找到需要删除的节点,把它free掉就好 所删除的节点只有一个左子结点,或者只有一个右子结点 ...
分类:
编程语言 时间:
2018-11-15 21:14:29
阅读次数:
141
1 #include 2 #include 3 /* 4 头插法链表的基本操作:创建空链表,插入节点,遍历输出节点数据,求链表长度,查找结点,删除结点。 5 */ 6 typedef struct node 7 { 8 int data; 9 struct node * next; 10 }NODE... ...
分类:
其他好文 时间:
2018-09-25 20:34:43
阅读次数:
153
删除结点1之后,下一个删除的就是3了。 程序: 结果如下: 第一个要删除的结点是1,node是一个引用,指向1这个结点,也就是0结点中的孩子指针的引用,node = node->child执行完之后,0结点里面的孩子指针就指向了3,也就是node这个指针指向了3,这个node此时还是0结点中的孩子指 ...
分类:
其他好文 时间:
2018-09-24 18:29:16
阅读次数:
163
利用虚拟节点进行删除结点,pre始终指向不重复的钱一个元素,一开始指向虚拟结点。如果遇到重复结点就全部删除再与pre相连接. ...
分类:
其他好文 时间:
2018-09-24 11:26:41
阅读次数:
151
这道题从看到到做出来有两周吧,一直头铁没有看题解,有一天走路的时候突然就想懂了。有点爽! 该题的子问题是给一个图,让找其中一个子图使得子图中的每个节点度都大于等于k。怎么解决? 把这个图里面小于k个度的结点都删掉不就行了,注意这里要用dfs,因为删除u结点后,可能导致v结点的度也不到k了(为了避免重 ...
分类:
其他好文 时间:
2018-09-22 12:27:18
阅读次数:
216
本文参考自《剑指offer》一书,代码采用Java语言。 更多:《剑指Offer》Java实现合集 题目 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。 思路 通常那样从头开始查找删除需要的时间为O(n),要在O(1)时间删除某结点,可以这样实现:设待删除结点i的下一个结 ...
分类:
编程语言 时间:
2018-09-18 17:23:36
阅读次数:
187
本文参考自《剑指offer》一书,代码采用Java语言。 更多:《剑指Offer》Java实现合集 题目 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。 思路 这道题较简单,自己先试着模拟一下 ...
分类:
编程语言 时间:
2018-09-13 16:35:21
阅读次数:
166