两种方法求单链表逆序
来源:互联网 发布:mac地址绑定错误 编辑:程序博客网 时间:2024/09/21 08:19
1 递归,很简单
代码:
#include<iostream> using namespace std; typedef struct node{int data;struct node * pNext;}Node ,*pNode;void createNode(pNode & pHead){int temp;scanf("%d",&temp);pNode p,q;bool isFirst = true;while(temp){if(isFirst){p=q=pHead=(pNode)malloc(sizeof(Node));pHead->data = temp;isFirst = false;}else{q = new Node();q->data = temp;q->pNext=NULL;p->pNext = q;p =q;}scanf("%d",&temp);}}void print(pNode pHead){if(pHead){cout<<pHead->data<<" ";print(pHead->pNext);}elsereturn;}void reverse(pNode pcur,pNode & pHead){if((NULL == pcur) ||( NULL == pcur->pNext)){pHead = pcur;return;}else{pNode pnext = pcur->pNext;reverse(pnext,pHead);pnext->pNext = pcur;pcur->pNext = NULL;}}int main() { pNode pHead = NULL;createNode(pHead);cout<<"原链表:"<<endl;print(pHead);cout<<"翻转:"<<endl;reverse(pHead,pHead);print(pHead); return 0; }
运行结果:
2 不是递归,循环:
#include<iostream> using namespace std; typedef struct node{int data;struct node * pNext;}Node ,*pNode;void createNode(pNode & pHead){int temp;scanf("%d",&temp);pNode p,q;bool isFirst = true;while(temp){if(isFirst){p=q=pHead=(pNode)malloc(sizeof(Node));pHead->data = temp;isFirst = false;}else{q = new Node();q->data = temp;q->pNext=NULL;p->pNext = q;p =q;}scanf("%d",&temp);}}void print(pNode pHead){if(pHead){cout<<pHead->data<<" ";print(pHead->pNext);}elsereturn;}pNode reverse(pNode & pHead){if(NULL == pHead || NULL == pHead->pNext){return pHead;}pNode p1,p2,p3;p1=pHead;p2=pHead->pNext;while(p2){p3=p2->pNext;p2->pNext = p1;p1 = p2;p2 = p3;}pHead->pNext = NULL; /*设置链表尾*/pHead = p1; /*调整链表头*/return pHead;}int main() { pNode pHead = NULL;createNode(pHead);cout<<"原链表:"<<endl;print(pHead);cout<<"翻转:"<<endl;reverse(pHead);print(pHead); return 0; }
运行结果:
0 0
- 两种方法求单链表逆序
- 求逆序对数的两种方法
- 单链表反转/逆序的两种方法
- 单链表反转/逆序的两种方法
- 两种方法求解逆序对
- 单链表反转/逆序的两种方法
- 单链表反转/逆序的两种方法
- 单链表反序,逆序的两种方法
- 不带头节点链表逆序的两种方法
- 归并排序,树状数组 两种方法求逆序对
- java两种方法将一个字符串逆序
- 实现数组逆序排列的两种方法
- 两种字符串逆序方式
- 链表逆序两种
- C++输入一个字符串,把其中的字符按照逆序输出的两种方法
- C++输入一个字符串,把其中的字符按照逆序输出的两种方法
- 链表面试题--两种方法逆序打印单链表(栈和递归)
- 单链表的两种逆序算法
- 【水输入】#52 A. Bar
- poj2499
- BUPT Summer Journey #test9 A
- UVALive 5025 Arranging Your Team dfs
- 使用MJRefresh上下拉刷新时的问题
- 两种方法求单链表逆序
- 使用Zipalign优化Android应用
- Creating a ClickOnce application
- BUPT Summer Journey #test9 B
- Fijkstra算法C语言版本和MATLAB版本
- 最长公共临时文档7
- 8/8
- hd 2153 仙人球的残影
- Unity3D深入浅出 - 光源组件(Light)