题目:输入单链表的头结点,反转链表并输出反转之后的头结点。
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,说明所有的节点处理完毕。
测试用例:空链表、仅有一个节点的链表