题目:删除带头结点的单链表L中的结点p,p不是最后一个结点,要求时间复杂度为O(1)。
解题思路:
如果不要求时间复杂度为O(1),我们可以找出p的前驱结点,然后很容易就删除p。
现在要求时间复杂度为O(1),因为p不是最后一个结点,知道结点p我们可以删除p的后继结点,那么我们可以把p的后继结点元素的值赋给p结点元素的值。
ADT定义如下
#define ElemType int...
分类:
其他好文 时间:
2015-01-13 17:47:09
阅读次数:
181
题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个)
解题思路:
用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加1,最长时与单链表一样长,设一个指针p,让它指向头结点,从单链表中第一个元素开始,将它的值放入辅助数组中,然后依次访问单链表后面的元素,用该元素的值与数组中所有已经被赋值的元素的值进行比较,如果不等于数组中任何元素的值,那么让p的ne...
分类:
其他好文 时间:
2015-01-13 12:38:01
阅读次数:
179
题目:有两个带头结点的单链表L1,L2,判断它们是否相交(它们中是否有相同的结点)
解题思路:
L1,L2中任何一个链表为空它们不相交
因为单链表中可能有环,所以分3种情况讨论
1、L1,L2中都没有环,那么可以通过判断它们中最后一个结点是否相同,来判断它们是否相交
2、L1,L2中一个有环,一个没有环,那么它们一定不相交
3、L1,L2中都有环,那么只有当它们的环相同时,它们才相...
分类:
其他好文 时间:
2015-01-12 17:41:33
阅读次数:
175
[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020]
图的邻接表表示法类似于树的孩子链表表示法,就是对图中的每个顶点vi,将所有邻接于vi的顶点链接成一个单链表,这个单链表就称为顶点vi的邻接表。在邻接表中有两种结点结构:头结点(vexdata,firstarc)、表结点(adjvex,nextarc)。
其...
分类:
其他好文 时间:
2015-01-12 00:24:47
阅读次数:
247
题目一: 不含头结点的单链表转置,算法时间复杂度O(N)代码如下:struct LNode;typedef struct LNode *List;typedef struct LNode *Position;struct LNode{ ElementType elem; Position...
分类:
编程语言 时间:
2015-01-09 22:08:37
阅读次数:
234
<?php
classQNode{
public$data;
public$next;
publicfunction__construct($data){
$this->data=$data;
$this->next=null;
}
}
classLinkQueue{//链队列包含头结点,实例化时,此队列为空
private$data;
private$next;
private$front;//指向头结点
private$rear;//指..
分类:
Web程序 时间:
2015-01-09 01:43:38
阅读次数:
189
循环链表:最后一个结点的指针域的指针又指回第一个结点的链表; 循环单链表与单链表的区别在于:表中最有一个节点的指针不再是NULL, 而改为指向头结点(因此要对我们原来的MyList稍作修改), 从而整个链表形成一个环. 因此, 循环单链表的判空条件不再是头结点的指针是否为空, 而是他是否等于头结点; 其实如果只是单纯的实现循环链表对单链表的性能提升是不明显的, 反而增加了代码上实...
分类:
其他好文 时间:
2015-01-05 22:00:44
阅读次数:
233
Sort a linked list using insertion sort.注意:1.当新链表要插入最小值时,即插入一个新的头结点,那么原来的指向头结点的指针要更换。sortedList=s;使得sortedList指针也指向s所指的节点。(s为新头结点)2.注意q和preq的关系,插入最大结点...
分类:
其他好文 时间:
2014-12-30 21:58:07
阅读次数:
123
连用插入排序法将链表排序
为了方便,只定义一个头节点。
思路:
定义头结点 result 令 result->next =head , 然后将链表中的值一一取出来,然后插入到合适的位置 插入之前要先断开链表 新链表刚开始只有一个元素 head
令p=head->next p往后遍历, 将p的值插入到合适的新链表中...
分类:
其他好文 时间:
2014-12-29 23:04:12
阅读次数:
200
在CLH锁核心思想的影响下,Java并发包的基础框架AQS以CLH锁作为基础而设计,其中主要是考虑到CLH锁更容易实现取消与超时功能。比起原来的CLH锁已经做了很大的改造,主要从两方面进行了改造:节点的结构与节点等待机制。在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁、入队列、释放锁等实现都与头尾节点相关,并且每个节点都引入前驱节点和后后续节点的引用;在等待机制上由原来的自旋改...
分类:
编程语言 时间:
2014-12-26 23:02:18
阅读次数:
370