逆置 / 反转单链表

将单链表的反转 也就是把单链表节点的指针反向。

思路:

 首先,考虑到单链表只能单一方向访问下一个节点,所以我们先创建指向前一个节点的指针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;
	}
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值