标签:两种方法求单链表逆序
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); }else return; } 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); }else return; } 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; }
标签:两种方法求单链表逆序
原文地址:http://blog.csdn.net/buyingfei8888/article/details/38443433