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;
}
运行结果: