在简单的算法中,链表是我们经常用到的,同时,链表有时候也是让我们很头痛的一种基本操作。下面代码中,包含了链表的一些基本操作: 1.链表的建立:(1)头插法 (2)尾插法 (3)有序建立 2.链表的插入 3.链表的删除 4.链表逆置 5.在链表中查找倒数元素 6.在链表中查找中间元素 ...
分类:
其他好文 时间:
2014-10-09 13:09:03
阅读次数:
319
1.数组必须事先定义好固定的长度,不适合数据动态的增长;
当要增加数据时,可能会超出原先定义的长度的个数,当要减少数据时,会造成内存的浪费
2.链表是动态进行内存分配,可以适应动态数据的增减,方便数据的插入、删除,
链表必须根据next指针找到下一个元素
数组要插入、删除数据时,需要移动大量的数据,非常的繁琐...
分类:
其他好文 时间:
2014-09-19 19:26:36
阅读次数:
131
博文的记录源自阅读著名的酷壳主页:http://coolshell.cn/articles/8990.html Coolshell图文并茂说明了这个问题——我们在删除链表的时候,常常需要记录该结点在链表中是否有前趋prev。如果有,那么需要把prev->next指向该结点的next域,然后再删除该....
分类:
其他好文 时间:
2014-09-07 18:27:05
阅读次数:
254
60.在 O(1)时间内删除链表结点(链表、算法)。题目:给定链表的头指针和一个结点指针,在 O(1)时间删除该结点。链表结点的定义如下:struct ListNode{int m_nKey;ListNode* m_pNext;};函数的声明如下:void DeleteNode(ListNode*....
分类:
其他好文 时间:
2014-08-14 15:56:18
阅读次数:
148
利用二级指针删除链表内一个元素,传统的做法是:找到将要删除元素的前一个指针,然后再删除当前元素。代码示例:void delete_node( elem_type x, struct node* l ){struct node* p = find_prev ( x, l );if ( !p->...
分类:
其他好文 时间:
2014-07-19 09:38:58
阅读次数:
240
1.指针的联动
通过两个指针分别指向前驱和后继结点,并在单向链表上进行移动,当指针指向待处理的结点时,该结点的前驱也有指针指向。
2.设有一个无序单向链表,且数据域的值均不相同,使指针pmin指向最小值结点,并使指针prem指向最小值结点的前驱结点:
代码片段:
for(p = head; p; q = p, p = p->next)
{
if(pmin->data > p->...
分类:
其他好文 时间:
2014-07-18 21:26:41
阅读次数:
231
通常我们所说的删除链表的某个结点,是彻底删除该结点的空间,而要这么做就必须知道其前驱结点。这里的想法是,链表中存储的val是同类型的,只要将该结点的val内容删除就可以了。那么就可以用该结点的后继结点的值覆盖当前结点,然后删除其后继结点,而对于其后继结点而言,该结点就是前驱。
这里只需要考虑当前删除的结点是否为last node 就可以了,至于是否是头结点,这种情况是可以归为同一种情况的,只是参...
分类:
其他好文 时间:
2014-07-08 13:58:04
阅读次数:
197
#include
#include
#include
#include
using namespace std;
struct Node
{
int data;
struct Node* next;
};
struct Node* create_list(int len)
{
if (len <= 0)
return NULL;
struct Node* head;
...
分类:
其他好文 时间:
2014-06-27 23:54:36
阅读次数:
311
每天一个小算法还是有点没时间,尽量抽出时间写一写。今天是合并有序的链表,对单链表有点忘了,尤其是指针指来指去的,有点晕,幸好基础还算好,想了想还是能想回来。代码使用随机数函数生成一个链表,然后对链表排序,最后合并链表并打印,删除链表的函数于算法无关紧要,所以未实现^_^。在Linux/g++下编译运...
分类:
其他好文 时间:
2014-06-16 09:07:08
阅读次数:
216