文章目录

//反转链表注意别断链

#include <iostream>

using namespace std;
typedef struct ListNode{
    int m_nValue;
    ListNode* m_pNext;
}ListNode, *List;//必须是一个链表


void Insert(List& pHead,int data){
    ListNode* p=new ListNode;
    p->m_nValue=data;
    p->m_pNext=NULL;
    if(pHead==NULL)
        pHead=p;
    else{
        p->m_pNext=pHead;
        pHead=p;
    }

}
void Print(List& pHead){
    if(pHead==NULL)
        return ;
    ListNode* p=pHead;
    while(p){
        cout<<p->m_nValue<<" ";
        p=p->m_pNext;
    }
    cout<<endl;
}
ListNode *ReverseList(List &L){
    ListNode* pNode=L;
    List ReverseHead=NULL;
    ListNode* pPre=NULL;//前一个节点
    while(pNode!=NULL){
        ListNode* pNext=pNode->m_pNext;//保存后一个节点,不至于反转时候丢失

        if(pNext==NULL)
            ReverseHead=pNode;//就一个节点
        pNode->m_pNext=pPre;//实现反转
        pPre=pNode;
        pNode=pNext;//继续下一对节点的反转
    }
    return ReverseHead;
}
int main()
{
    ListNode *p;
    List L=NULL;
    Insert(L,5);
    Insert(L,2);
    Insert(L,3);
    Insert(L,4);
    Print(L);
    p=ReverseList(L);
    while(p){
        cout<<p->m_nValue<<" ";
        p=p->m_pNext;
    }

    return 0;
}
文章目录