C/C++ 双链表之逆序的实例详解
更新时间:2020年4月25日 17:30 点击:1531
C/C++ 双链表之逆序的实例详解
一、结点结构
双向链表的数据结构定义如下:
typedef struct node { ElemType data; struct node *prior struct node *next; }list;
其中,ElemType可以是任意数据类型如int、float或者char等,在算法中,规定其默认为int类型。
二、带头结点
本文描述的是双向链表逆序,链表逆序需要维护3个指针,分别指向前一个节点、当前节点和下一个节点,具体代码如下:
list *reverselist(list *head) { if ((NULL == head) || (NULL == head->next)) { return head; } list *p1=head->next, *p2=p1->next, *p3=NULL; p1->next = NULL; while (p2) { p3 = p2->next; // 保存当前结点的下一结点 p2->next = p1; // 改变当前结点的next域,指向它的前一个结点 p1->prior = p2; // 改变前一个结点的prior域,指向它的后一个结点 p1 = p2; // 指针移到下一个结点 p2 = p3; } head->next = p1; // 恢复头结点 p1->prior = head; return head; }
在链表逆序过程中,非常重要的一点是要防止断链问题,因此,在移动指针逆序某个结点时,需要用一个指针指向该结点的下一结点,防止下一结点丢失。
三、不带头结点
list *reverselist(list *head) { if ((NULL == head) || (NULL == head->next)) { return head; } list *p1=head, *p2=p1->next, *p3=NULL; p1->next = NULL; while (p2) { p3 = p2->next; p2->next = p1; p1->prior = p2; p1 = p2; p2 = p3; } head = p1; return head; }
不带头结点的链表逆序与带头结点的区别在于红色部分代码,即初始p1指向的是第一个结点而不是头结点,最后head直接指向p1而不是用其next来指向p1。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇: C 语言中strstr函数实例详解
相关文章
Windows配置VSCode+CMake+Ninja+Boost.Test的C++开发环境(教程详解)
这篇文章主要介绍了Windows配置VSCode+CMake+Ninja+Boost.Test的C++开发环境,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-05-12VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h”或者检测到 #include 错误,请更新includePath)(POSIX API)
这篇文章主要介绍了VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h” 或者 检测到 #include 错误。请更新includePath) (POSIX API),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-13- 这篇文章主要介绍了 C/C++如何获取当前系统时间的实例详解的相关资料,这里提供了几种实现方法,帮助大家实现这样的功能,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C#实现用栈求逆序的方法,涉及C#数据结构中栈的压入与取出相关操作技巧,需要的朋友可以参考下...2020-06-25
- 本篇文章是对C/C++中多线程的学习心得总结进行了详细的分析介绍,需要的朋友参考下...2020-04-25
- 这篇文章主要介绍了SQLite教程(二):C/C++接口简介,本文讲解了C/C++接口概述、核心对象和接口、参数绑定等内容,需要的朋友可以参考下...2020-07-11
- 双链表:在单链表的每个结点中,再设置一个指向其前驱结点的指针域,下面这篇文章主要给大家介绍了关于利用C++实现双链表基本接口的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。...2020-04-25
- 这篇文章主要介绍了C/C++ 中gcc和g++的对比与区别的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C/C++ 公有继承、保护继承和私有继承的区别的相关资料,需要的朋友可以参考下...2020-04-25
- 今天小编就为大家分享一篇关于C/C++从零开始的cmake教程,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-04-25
C/C++: Inline function, calloc 对比 malloc
以下是对c/c++中的malloc函数与calloc函数的区别以及它们之间的联系进行了介绍,需要的朋友可以过来参考下...2020-04-25- 这篇文章主要介绍了使用docker部署一个简单的c/c++程序的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-22
- 这篇文章介绍了C#跨平台开发之使用C/C++生成的动态链接库,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2022-01-17
- 这篇文章主要涉及了C/C++ 编译器优化的简单介绍,具有一定参考价值。如有不对之处,欢迎指出。...2020-04-25
- 这篇文章主要介绍了C/C++ 中堆和栈及静态数据区详解的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C/C++实现快速排序的方法,这几天在找工作,被问到快速排序,结果想不出来快速排序怎么弄的;回来搜索了一下,现在记录下来,方便以后查看。...2020-04-25
- 这篇文章主要介绍了C/C++ 动态数组的创建的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的功能,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C/C++函数参数传递机制详解及实例的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C/C++ 数组和指针及引用的区别的相关资料,这里从汇编的角度来分析他们之间的区别,需要的朋友可以参考下...2020-04-25
- 本篇文章是对C/C++中退出线程的四种解决方法进行了详细的分析介绍,需要的朋友参考下...2020-04-25