逆置 / 反转单链表
2016-06-07 11:23
225 查看
将单链表的反转 也就是把单链表节点的指针反向。
思路:
首先,考虑到单链表只能单一方向访问下一个节点,所以我们先创建指向前一个节点的指针Prev,当然,当前节点
pCurrent 的 下一个节点的位置也要设置创建一个指针PpNext。
然后,思考特殊情况:1、空链表;2、只有一个节点的链表(反转前后不变)
正常情况(节点数>=2):
pCurrent指向头结点位置,初始化Prev为空(因为反转后 原来头结点的位置就是
尾节点,尾节点当然指向NULL),PpNext当然指向下一个节点。一直已知循环,每次pCurrent都指向前一个节点
(Prev),然后把节点在通过PpNext移动,直到遇到NULL。
代码如下:
typedef int DataType;
typedef struct strNode
{
struct strNode* pNext;
DataType data;
}Node;
typedef struct strNode* PNode;
PNode ReverseNode(PNode pHead)// 逆置 / 反转单链表
{
PNode PCurrent = NULL;
PNode Prev = NULL;
PNode PpNext = NULL;
if (pHead == NULL||pHead->pNext==NULL)
{
return;
}
PCurrent = pHead;
while (PCurrent != NULL)
{
PpNext = PCurrent->pNext;
PCurrent->pNext = Prev;
Prev = PCurrent;
PCurrent = PpNext;
}
if (PCurrent == NULL) // 注意把最后一个节点别忘了反转!!
{
pHead = Prev;
return pHead;
}
}
思路:
首先,考虑到单链表只能单一方向访问下一个节点,所以我们先创建指向前一个节点的指针Prev,当然,当前节点
pCurrent 的 下一个节点的位置也要设置创建一个指针PpNext。
然后,思考特殊情况:1、空链表;2、只有一个节点的链表(反转前后不变)
正常情况(节点数>=2):
pCurrent指向头结点位置,初始化Prev为空(因为反转后 原来头结点的位置就是
尾节点,尾节点当然指向NULL),PpNext当然指向下一个节点。一直已知循环,每次pCurrent都指向前一个节点
(Prev),然后把节点在通过PpNext移动,直到遇到NULL。
代码如下:
typedef int DataType;
typedef struct strNode
{
struct strNode* pNext;
DataType data;
}Node;
typedef struct strNode* PNode;
PNode ReverseNode(PNode pHead)// 逆置 / 反转单链表
{
PNode PCurrent = NULL;
PNode Prev = NULL;
PNode PpNext = NULL;
if (pHead == NULL||pHead->pNext==NULL)
{
return;
}
PCurrent = pHead;
while (PCurrent != NULL)
{
PpNext = PCurrent->pNext;
PCurrent->pNext = Prev;
Prev = PCurrent;
PCurrent = PpNext;
}
if (PCurrent == NULL) // 注意把最后一个节点别忘了反转!!
{
pHead = Prev;
return pHead;
}
}
相关文章推荐
- Windows访问Ubuntu14.04远程桌面全攻略
- 第六部分:分布式系统
- 如何读标准和代码
- 浅谈javascript对象、如何实现继承、jQuery方法的扩展(jquery插件)
- 乘式还原
- UITableViewCell 选中时的颜色设置
- 关于忘记Linux密码后的密码重置
- 第五部分:保护与安全
- Linux中tar命令操作文件的基本使用教程
- js正则表达式语法
- XenServer架构之XAPI
- 第四部分:存储管理
- Raspberry - 树莓派系统安装
- prototype对象的真正作用
- 33 Search in Rotated Sorted Array
- LeetCode:Scramble String
- Qt线程中会导致句柄数增加的行为
- PLL与DLL的区别
- 面试笔记----------HashMap排序
- 第三部分:内存管理