题目:给定单项链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。解析:
删除单向链表中的一个节点,常规做法是必须找到待删除节点的前一个节点才能实现,而这样做的时间复杂度是O(n),无法满足要求。
创新想法:当我们想删除一个节点时,并不一定要删除节点本身,可以用当前节点保存它下一节点的值,然后删除它的下一个节点。情况案例:
1. 输入节点为NULL
2. 单链表只有一个节点,即...
分类:
其他好文 时间:
2015-07-06 16:03:01
阅读次数:
99
链式队列是基于单链表的一种存储表示
队列的对头指针指向单链表的第一个节点,队尾指针指向单链表的最后一个节点,
退出一个元素 则删除对头指针的节点,添加元素则在队尾增加一个节点
使用条件:数据元素变动比较大的情况。不存在溢出的情况
队列的抽象基类:
#ifndef QUEUE
#define QUEUE
//队列的抽象基类
template
class Queue
{
publi...
分类:
其他好文 时间:
2015-06-23 18:00:17
阅读次数:
140
【摘要】队列特性:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。
这样有个缺陷,空间利用率不高,所以我们直接学习循环队列(基于连续内存的)。
(1)设计队列数据结构typedef struct _QUEUE_NODE
{
int* pData;
int length;//队列长度
int head ;//队头指针...
分类:
其他好文 时间:
2015-06-19 11:53:13
阅读次数:
103
字典树,顾名思义,就是一种对字母等字符串进行处理的一种特殊数据结构。说白了,就是二十六叉树。定义一个头指针,每次从头指针开始操作。
有两种常用的操作:
1.查询某个字符串的出现次数。
每个节点的count置为0,直到这个字符串结束,在末尾处count++.这样,就记录了该字符串的出现次数。
2.查询某个字符串特定序列出现的次数。
每个节点的count初始化为0,当读入...
分类:
其他好文 时间:
2015-06-17 15:21:18
阅读次数:
100
构建一个递归函数treeToList(Node root),将一棵已排序的二叉树,调整内部指针,使之从外面看起来,是一个循环双向链表。其中前向指针存储在"small"区域,后向指针存储在"large"区域。链表需要进行调整进行升序排序,并返回链表头指针。
下面的这篇文章详细解释了这个转换的过程。
http://cslibrary.stanford.edu/109/TreeListRecursi...
分类:
编程语言 时间:
2015-06-14 15:14:41
阅读次数:
167
在双向链表中删除一个指定的节点,可以分为下面的这3种情况:
(a) 原始的双向链表
(b) 删除头节点后
(c) 删除中间节点后
(d) 删除尾节点后
算法
假设需要被删除的节点称之为delNode.
1) 如果delNode为头节点,则将头指针指向后续的节点。
2) 如果delNode的前向节点存在,则将前向节点的后向指针置为delNode...
分类:
其他好文 时间:
2015-06-14 01:55:35
阅读次数:
252
实现双向链表的反转。参考下面的例图:
(a) 原始双向链表
(b) 已经反转的双向链表
下面是一个用于反转双向链表的简单方法。所需要做的事情就是交换每个节点的前向指针和后向指针,然后调整链表的头指针和尾指针。...
分类:
其他好文 时间:
2015-06-14 01:53:25
阅读次数:
312
1、从无头单链表中删除节点
一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个也不是最后一个节点)。将该节点删除。
A——>B——>C——>D =====》 A——>C——>D
问题解析:由于只能单向遍历,故与删除B节点,无法得知B的前驱A,即无法像普通删除中那样让A的next指向C;
这里有个技巧,将C当做B,而B复制成C,则删除C节点即可...
分类:
其他好文 时间:
2015-06-13 17:13:38
阅读次数:
175
原文:http://blog.csdn.net/liuxialong/article/details/6555850如何判断单链表是否存在环给定一个单链表,只给出头指针h:1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带环链表的长度是多少?解法:1、对于问题1,使用...
分类:
其他好文 时间:
2015-06-11 22:50:47
阅读次数:
202
这里的k可能是比链表长度要大的数字,因此实际旋转的位置就是k%len(list)。如果这个计算结果等于零或者等于len(list),列表是不用旋转的。接下来如果是事例给出的正常情况,那么有三步就能完成旋转。(1)第一个辅助指针从头开始后移k个位置。(2)这时第二个辅助指针指向头指针,然后两个指针同时...
分类:
其他好文 时间:
2015-06-10 22:21:49
阅读次数:
241