链表——头结点式2
来源:互联网 发布:波导手机淘宝 编辑:程序博客网 时间:2024/05/17 03:38
上次主要讲了链表的建立和几种插入操作,今天再进行一些与链表相关的操作。
先来进行根据位置删除元素的操作:
Node *tmp = h; int i; for (i = 0; i < pos-1; i++) { if (tmp->next == NULL) break; tmp = tmp->next; }Node *p = tmp->next; tmp->next = p->next; free(p);
与前面一样参数pos也是代表删除的位置,
然后我们也要进行与插入相同的操作,找到想删除的数的前一个数,用一个p来保存要删除的节点,然后将要删除节点的前一个节点直接指向它的下一个节点,然后将p释放掉,这样就完成了删除。
再来个根据数据删除节点:
Node *tmp = h; while (tmp->next) { if (tmp->next->data == data) break; tmp = tmp->next; } if (tmp->next == NULL) return FALSE; Node *p = tmp->next; tmp->next = p->next; free(p);
与上面一样,归根结底都是要找到要删除节点的上一个元素再进行相关操作,然后的删除操作也是大同小异了。
下面是逆序:
Node *pre = h->next; Node *cur = h->next->next; Node *tmp; while (cur) { tmp = cur->next; cur->next = pre; pre = cur; cur = tmp; } h->next->next = NULL; h->next = pre;
看到逆序我们会想到什么?逆序就是无非就是将各个节点指针的指向换个方向,并将原来的头指向NULL,head指向原来的尾。但如何实现这一过程呢,我们这里用到三个指针,第一个指针pre指向链表第一个元素,第二个指针cur先指向pre后面一个节点,第三个指针tmp作为用来调节cur的位置,每当pre与cur进行交换后就将cur指到tmp所在位置,即原先cur的下一个位置,然后pre再与cur进行交换操作。最后将原先的第一个节点指向NULL。便完成了逆序操作。
其他的一些操作,比如根据数据获取相关节点的位置等操作与以上也是大同小异,就不多说了。
阅读全文
0 0
- 链表——头结点式2
- 链表——头结点式1
- 数据结构——链表(头指针、头结点)
- 数据结构——链表(头结点循环链表)
- 链表、头指针、头结点
- 链表、头指针、头结点
- 链表 头指针 头结点
- 链表、头指针、头结点
- 链表、头指针、头结点
- 链表、头指针、头结点
- 链表、头指针、头结点
- 链表、头指针、头结点
- 链表、头指针、头结点
- 链表、头指针、头结点
- 链表、头指针、头结点
- 链表、头指针、头结点
- 链表、头指针、头结点
- 链表 头指针 头结点
- java配置环境变量
- java日志文件log4j.properties配置详解
- 基础篇三---运维学习的基本思路和框架
- js eval()
- Animation总结(差值器和估值器)
- 链表——头结点式2
- 输出以下的杨辉三角形 要求输出10行 C语言
- VUE2.0组件库
- 传智播客-Java学习笔记day25
- Shiro架构
- BZOJ 4719: [Noip2016]天天爱跑步 tarjanlca
- 如何理解appium
- Tip6 区别readonly和const的使用方法
- 关于虚拟机关机/重启后自动还原的问题解决方案