文章标题 C语言实现单链表之逆置和逆序打印
来源:互联网 发布:知乎头像 编辑:程序博客网 时间:2024/06/15 12:04
一、逆序打印(只遍历一次)
如果没有要求只遍历一次,那么就可以用循环就可以解决,但其难点在于遍历一次,要解决此问题就必须用到递归。
代码实现:
void PrintListTailToHead(pSeqList pHead)
{
if (pHead == NULL)
{
return;
}
PrintListTailToHead(pHead->pNext);
printf(“%d “, pHead->_data);
}
注意:递归条件的设置(条件不对,递归不会停止,程序会因为内存耗尽而崩溃)
二、逆置(只遍历一次)
与上面逆序打印不同的是逆置需要改变节点的指向,因此可以把第一节点当一个新的链表,把后面的节点头插即可完成要求。
代码实现:
void ReverseList(pSeqList* pHead)
{
assert(pHead);
pSeqList proNode = *pHead;
pSeqList NextNode = proNode;
pSeqList NowNode = NULL;
if ((*pHead == NULL) || (proNode->pNext == NULL))
{
return;
}
//第一个节点为新的链表,所以需要从第二个节点开始
proNode = proNode->pNext;
while (proNode != NULL)
{
NowNode = proNode;//保存当前节点
proNode = proNode->pNext;//走到后一个节点
//头插
NowNode->pNext = NextNode;
NextNode = NowNode;
}
//当头插时原链表的第一个节点为新链表的最后一个节点,因此要制空
(*pHead)->pNext = NULL;
*pHead = NowNode;
}
注意:当链表为空和只有一个节点时逆置是没有意义的,出循环时把新链表的最后一个节点制NULL,否则会形成环。
- 文章标题 C语言实现单链表之逆置和逆序打印
- 文章标题C语言实现单链表之基础操作
- C语言实现单链表的逆序打印(带头结点)
- 递归逆序打印单链表(c实现)
- FFT之数组逆序C语言实现
- C语言实现单链表(不带头结点)的逆序打印
- 单链表之逆序打印
- C语言实现单链表逆序与逆序输出实例
- c语言实现字符串逆序
- C语言实现逆序数
- C语言单链表逆序
- c语言实现直接插入排序(正序和逆序)
- C语言实现双向非循环链表(不带头结点)的逆序打印
- 文章标题c语言快排;
- C语言实现链表之单向链表(十四)链表打印和排序
- 用c语言实现单链表的逆序输出
- 【面试算法系列】逆序输出一个单链表 - C语言实现
- C语言实现单链表的生成打印查找删除逆置排序
- 数组类运算
- 函数指针的定义和使用
- leetcode笔记--Contains Duplicate I & II & III
- 本机IIS的用法
- android几种定时器机制及区别
- 文章标题 C语言实现单链表之逆置和逆序打印
- C#图像处理技术资料目录
- redis 一些常用命令
- ListView onItemClick onItemLongClick
- 钱海支付笔试
- 运算符重载
- 常用正则表达式
- cocos-lua 定时器使用的2种方式
- Maximal Square