题目:输入单链表的头结点,反转链表并输出反转之后的头结点。
pNode代表当前节点,修改pNode的时候,要知道他的前面节点,并保存后面节点,因为一旦pNode->next被修改,就和后边断开。
ListNode* reverse(ListNode *phead)
{
ListNode *pReversedHead=NULL;
ListNode *pNode=phead;
ListNode *pPre=NULL;
while(pNode!=NULL)
{
ListNode *pNext=pNode->next;
if(pNext==NULL)
pReversedHead=pNode;
pNode->next=pPre;
pPre=pNode;
pNode=pNext;
}
return pReversedHead;
}初始条件:pNode=phead,pPre=NULL;这个符合正常逻辑,从链表的第一个节点开始处理,第一个节点的前序节点为NULL。
中间处理:每次保存pNext的值,如果pNext=NULL,说明pNode为最后的节点,保存用来返回。
结束条件:pNode=NULL,说明所有的节点处理完毕。
测试用例:空链表、仅有一个节点的链表
本文介绍了一种单链表反转的方法,通过迭代方式实现链表的反转,并详细解释了算法的实现过程,包括初始化条件、中间处理步骤及终止条件。
1317

被折叠的 条评论
为什么被折叠?



