函数功能:实现链表的反转。
思路:我们在对当前结点作修改时,一定要考虑会不会影响别的结点。如果会,我们就要做出相应的保存。
比如在我们销毁链表时,
Node* p=head;
while(p)
{
Node *q=p->next; //因为如果我们单纯的销毁p时会丢失它下一个结点。
//所以我们要把p->next 保存下来。
delete p;
p=q;
}
下面的函数也是一样的,如果 我们执行pNode->next=pre时,没有在之前 写上pNext=pNode->next; 这样就会丢失信息。先有一个简单的思路,不要去想实现所有的细节,要有大体的思路。
函数实现:
void reserve(Node * &head)
{
if(!head)
return 0;
Node *pre=NULL;
Node *pNode=head;
while(pNode)
{
//我们用两个指针可以完成对链表的反转,
//只是中间需要有一个临时变量。
Node *pNext=pNode->next;
//这个一定要保存下来,因为修改链接后就找不到next了
pNode->next=pre;
pre=pNode;
pNode=pNext;
}
head=pre;
}