C 单向链表就地逆转
1、问题描述
给定一个单链表L,设计函数Reverse将L就地逆转。即不需要申请新的节点,将第一个节点转换为最后一个结点,第二个节点转换为倒数第二个结点,以此类推。
2、思路分析
循环处理整个链表。将原链表的第一个结点取出,作为逆转后新链表的第一个结点(即新链表的链表头),同时原链表的第二个结点更新为原链表的链表头。之后不断取出原链表的链表头,插在新链表的链表头之前,即原链表的链表头不断“叛变到”新链表中充当新链表的链表头,从而达到就地逆转的目的。
3、代码分享及结果展示
PtrToNode Reverse(PtrToNode pOldHead)
{
PtrToNode pNewHead = NULL;
PtrToNode pTemp = NULL;
while (pOldHead != NULL)
{
pTemp = pOldHead->nextPtr;//暂时存储原链表第二个结点地址
pOldHead->nextPtr = pNewHead;//将原链表第一个结点的nextPtr指向新链表的链表头
pNewHead = pOldHead;//更新新链表链表头
pOldHead = pTemp;//更新原链表链表头
}
return pNewHead;//返回逆转后链表头
}
原创:秋沐霖
博客主页:https://www.cnblogs.com/HL-space/
欢迎转载,转载请注明出处。
出错之处,敬请交流、雅正!
创作不易,您的 " 推荐 " 和 " 关注 " ,是给我最大的鼓励!
博客主页:https://www.cnblogs.com/HL-space/
欢迎转载,转载请注明出处。
出错之处,敬请交流、雅正!
创作不易,您的 " 推荐 " 和 " 关注 " ,是给我最大的鼓励!