单链表逆置

来源:互联网 发布:java中spring是什么 编辑:程序博客网 时间:2024/05/21 10:26

单链表的逆置问题

(1)注意单链表是否包含头结点

(2)递归:邻位置换

      非递归:逆向思维,有个疑问就是递归代码对应的汇编代码


#include <iostream>#include <time.h>#include <math.h>using namespace std;typedef int DataType; //类型定义  typedef struct node{  //单链表定义  DataType data;  struct node* next;  }LinkNode,*LinkList;  /*递归算法(不含头结点)*/LinkList ReverseList2(LinkList& ListHead){//如果链表为空或者链表中只有一个元素if(ListHead == NULL || ListHead->next==NULL)return ListHead;else{LinkNode* head = ReverseList2(ListHead->next);//ReverseList2(ListHead->next);ListHead->next->next = ListHead;       //函数返回的是ListHead->nextListHead->next = NULL;return head;}}/*注意:(1)&是引用操作(2)此函数操作的是含有头结点的链表*/void ReverseList(LinkList& ListHead)  {  cout<<"Begin to Reverse the List"<<endl;  //三种情况if( ( NULL == ListHead )||( NULL == ListHead->next) || (ListHead->next->next == NULL) )return ;//边界检测  LinkNode* pPre=ListHead;    //先前指针  LinkNode* pCur=pPre->next;  //当前指针  LinkNode* pNext=NULL;       //后继指针 //ListHead = pCur;while(pCur!=NULL)  {  cout<<"交换后的当前指针指向的值: ";cout<<pCur->data<<"  "<<endl;pNext = pCur->next;  pCur->next=pPre;  pPre=pCur;  pCur=pNext;  }//最后pPre指向了最后一个元素cout<<endl;ListHead->next->next=NULL; //构造一个头结点,这里会造成内存泄露//LinkNode* Head = (LinkNode*)malloc(sizeof(LinkNode));ListHead->next = pPre;//ListHead = Head; }  /*单链表的创建(头插法,含有头指针)*/LinkList  CreateListHead(int n){LinkList LinkHead;LinkNode* p;int i;srand(time(0));LinkHead = (LinkList)malloc(sizeof(LinkNode));LinkHead->next = NULL;for(i = 0; i < n; i++){p = (LinkNode*)malloc(sizeof(LinkNode));p->data = rand()%100 + 1;p->next = LinkHead->next;LinkHead->next = p;}return LinkHead;}/*打印单链表的数据(含有头结点)*/void print(LinkList &L){LinkNode* p = L;if(p == NULL){cout<<"Empty list!!!"<<endl;return;}p = p->next;cout<<"单链表的数据: "<<endl;while( p->next != NULL){cout<<p->data<<"  ";p = p->next;}//cout<<"最后一个数: ";cout<<p->data<<endl;cout<<"Finished !!!"<<endl;}int main(){int n = 10;LinkList La;La = CreateListHead(n);print(La);//先保存头结点LinkNode* Head = La;    Head->next = ReverseList2(La->next);print(La);return 0;}


0 0
原创粉丝点击