单链表逆置
来源:互联网 发布: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
- 单链表逆置
- 单链表逆置
- 单链表逆置。
- 单链表逆置
- 单链表逆置
- 单链表逆置
- 单链表逆置
- 单链表逆置
- 单链表逆置
- 单链表逆置
- 单链表逆置
- 单链表逆置
- 单链表逆置
- 单链表逆置
- 单链表逆置
- 单链表逆置
- 单链表逆置
- 单链表逆置
- HTML安全16进制色一览表
- undefined reference to main,Eclipse生成动态链接库
- mediaserver
- C++ int,float,double,long表示范围
- 分层的初步理解
- 单链表逆置
- 黑马程序员—java基础学习--抽象类(abstract)、接口(interface)、多态
- 公司ios开发岗位面试题目总结
- JAVA验证码功能实现(生成验证码的Servlet)
- 设计模式笔记-迭代器模式
- Discount Louis Vuitton wiL9D
- CodeForces-281A-Word Capitalization
- Louis Vuitton Outlet Online sqqIG
- 如何双击打开JAVA中的jar文件(类似于VC中的可执行文件)