C 单向链表就地逆转 1、问题描述 2、思路分析 3、代码分享及结果展示

C 单向链表就地逆转
1、问题描述
2、思路分析
3、代码分享及结果展示

给定一个单链表L,设计函数Reverse将L就地逆转。即不需要申请新的节点,将第一个节点转换为最后一个结点,第二个节点转换为倒数第二个结点,以此类推。

2、思路分析

循环处理整个链表。将原链表的第一个结点取出,作为逆转后新链表的第一个结点(即新链表的链表头),同时原链表的第二个结点更新为原链表的链表头。之后不断取出原链表的链表头,插在新链表的链表头之前,即原链表的链表头不断“叛变到”新链表中充当新链表的链表头,从而达到就地逆转的目的。

C 单向链表就地逆转
1、问题描述
2、思路分析
3、代码分享及结果展示

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;//返回逆转后链表头
}

C 单向链表就地逆转
1、问题描述
2、思路分析
3、代码分享及结果展示