C++实现单链表的逆置

来源:互联网 发布:复活吧我的勇士java 编辑:程序博客网 时间:2024/06/10 13:15
#include<iostream>  using namespace std;  const int N=6;  typedef struct node{ //单链表        int data;        struct node* next;  }LinkedNode;  /****由数组创建单链表****/  LinkedNode *CreateList(int a[N])  {      LinkedNode* ListHead=new LinkedNode();      ListHead->data=a[0];      LinkedNode* q = ListHead;      for(int i=1;i<N;i++)      {          LinkedNode* p=new LinkedNode();          p->data=a[i];          q->next=p;          q=p;      }          return ListHead;  }  /****输出单链表****/  void PrintList(LinkedNode *ListHead)  {      if(NULL==ListHead)cout<<"The List is empty!"<<endl;      else      {          LinkedNode* p=ListHead;          while(p!=NULL)          {              cout<<p->data<<" ";              p=p->next;          }          cout<<endl;      }  }  LinkedNode* ReverseList(LinkedNode* ListHead)  {      cout<<"Begin to Reverse the List"<<endl;      if( (NULL==ListHead)||(NULL==ListHead->next) )return ListHead;  //边界检测      LinkedNode* pPre=ListHead;    //先前指针      LinkedNode* pCur=pPre->next;  //当前指针      LinkedNode* pNext=NULL;       //后继指针      while(pCur!=NULL)      {          pNext=pCur->next;          pCur->next=pPre;          pPre=pCur;          pCur=pNext;      }      ListHead->next=NULL;      ListHead=pPre;        //记录下新的头结点      return ListHead;}  /*void ReverseList(LinkedNode* pCur,LinkList& ListHead)  {      if( (NULL==pCur)||(NULL==pCur->next) )      {          ListHead=pCur;      }      else      {          LinkedNode* pNext=pCur->next;          ReverseList(pNext,ListHead); //递归逆置后继结点          pNext->next=pCur;            //将后继结点指向当前结点。          pCur->next=NULL;      }  } */ int main()  {      int a[N]={1,2,3,4,5,6};       LinkedNode* list=CreateList(a);      PrintList(list);        list = ReverseList(list);      PrintList(list);      system("pause");    return 0;  }  

0 0
原创粉丝点击