单链表反转-C++

来源:互联网 发布:淘宝客服发展前景 编辑:程序博客网 时间:2024/06/06 06:50
struct Link
{
     int data;
     Link *next;
};
 void reverse(Link* &head)
{
    if((head==NULL)||(head->next==NULL)) return ;
    Link* pNext=NULL;
    Link* pPrev=head;//保存链表头指针
    Link* pCur=head->next;//获取当前节点
    pPrev->next=NULL;//将头部指针的下一个节点置空
    while(pCur!=NULL)
    {
        pNext=pCur->next;// 将下一个节点保存下来
        pCur->next = pPrev;// 将当前节点的下一节点置为前节点
        pPrev = pCur;// 将当前节点保存为前一节点
        pCur = pNext;// 将当前节点置为下一节点
    }
    head=pPrev;
   return;
 

}
void printLink(Link* link)
{  
    Link* p=link;
    cout<<"打印链表"<<endl;
    while(p!=NULL)
    {
        cout<<p->data<<";";
        p=p->next;

    }
    return;
}

Link* creatLink()
{
    Link* head=new Link;
    head->data=0;
    head->next=NULL;
    Link* p1=head;
    
    for(int i=0;i<9;i++)
    {
        Link* p=new Link;
        p->data=i+1;
        p1->next=p;
        p->next=NULL;
        p1=p;

    }
    return head;


    
}
int _tmain(int argc, _TCHAR* argv[])
{
    Link* link=creatLink();
    //printLink(link);
    reverse(link);
   printLink(link);

    return 0;
}


上面的代码可以执行通过。这几天教学生,才知道很多东西都学得不是很清楚。要深刻反思下。