链表(一):单链表2
来源:互联网 发布:2017编程语言排名 编辑:程序博客网 时间:2024/06/06 13:02
上一篇讲了怎么创建一个空链表,和一个数据为n的初始化链表,这一篇就讲一下怎么在中间插入和删除节点以及查找节点所在的位置。
引用上一篇的图:
如图所示,要在p3和p2之间插入p1,只需把p3的next指针指向p1,再把p1的next指向p2即可。(注意顺序不能错)
实现如下:
void InsertNode(Linklist *L , int pos , ElemType e)//pos为插入的位置,即在链表第pos位后插入一个节点,e为插入的数据{ Linklist p,q; q = *L; while( pos-- ) { q = q->Next; } p = (Linklist)malloc(sizeof(Node)); //因为是新插入的节点,所以需要用malloc申请空间! p->data = e; p->Next = q->Next; q->Next = p;}
删除节点也是同理,只要把被删除节点的前一节点的next指针指向被删除节点的下一个节点即可,同时可以free掉被删除节点。(同样顺序很重要)
实现如下:
void Deletedata(Linklist *L , int pos , ElemType *e)//pos为删除的位置,把被删除节点的数据存入e中{ Linklist p,q; q = *L; while( --pos ) { q = q->Next; //此时q代表被删节点的前一节点,这个很重要 } p = q->Next; //p为将要被删节点 q ->Next = p->Next; *e = p->data; free(p);}而查找节点所在的位置其实更简单了,只要一个个从头遍历,找到相同的,返回当前的位置就行。
实现如下:
int Searchdata(Linklist L , ElemType e) //不需要对链表进行操作,传入L{ int pos=0; Linklist p; p = L; while( p->Next ) //若p->Next == NULL 则跳出while { pos++; p = p->Next; if( e == p->data ) //如果e跟链表中的某一个节点的data相同,则退出当前循环 { break; } } if( p-> Next ) { return pos; //若找到相同的,返回节点位置 } else return -1; //若没有找到,返回-1}
好了,单链表的内容差不多就这些。
0 0
- 链表(一):单链表2
- 链表(一):单链表1
- 链表-单链表(一)
- 链表(一)
- 数据结构-链表(一)
- 链表(一)
- 链表(一)
- 单链表(一)
- 单链表(一)
- 通用单链表(一)
- 数据结构一(单链表)
- 数据结构(一)单链表
- 单链表入门(一)
- Hibernate3.2(一)
- 项目一(2)
- 数据结构(二)链表(一)单链表
- 线性表-链表(一)
- JavaScript 数据结构(一): 链表
- Qt on android 播放视频的实现
- 算法竞赛入门经典:第六章 数据结构基础 6.13拓扑排序
- hdu-2544 最短路
- Check the difficulty of problems
- BZOJ 1603 [Usaco2008 Oct]打谷机 dfs
- 链表(一):单链表2
- Mac下浏览器超实用快捷键
- 算法竞赛入门经典:第六章 数据结构基础 6.14欧拉回路
- Strassen矩阵相乘算法
- Linux进程间通信 共享内存+信号量+简单例子
- hdu 5072 Coprime 容斥原理
- 搜芽 vbeta-1.3.1 安卓版
- hdu-1874 畅通工程续
- eclipse-hadoop插件