#include <iostream>
#include <cstdlib>
#include <cstdio>
采用单链表就地逆置的思想大概是这样:
1.断开单链表的头结点与第一个节点,这样头结点就变成了一个新的空链表;
2.然后从第一个结点开始,每次都取下原有链表的一个结点,插入到新链表表头(注意是从第一个结点开始 ,并不是第二个结点开始^-^);
3.然后到最后一个结点,就完事了。循环为:
<span style="font-family: Arial, Helvetica, sans-serif;">while(p){...... </span>
<span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> }</span>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void CreatList(LinkList &L,int n){
L=(LinkList) malloc(sizeof(LNode));
LinkList q=L;
for(int i=0;i<n;i++){
LinkList p=(LinkList) malloc(sizeof(LNode));
scanf("%d",&(p->data));
q->next=p;
q=p;
q->next=NULL;
}
}
void ShowList(LinkList L){
LinkList q=L->next;
while (q!=NULL){
cout<<(q->data)<<" ";
q=q->next;
}
cout<<endl;
}
int ReverseList(LinkList H){
LinkList p,q;
p=H->next;
H->next=NULL;
while(p){
q=p->next;
p->next=H->next;
H->next=p;
p=q;
}
return 1;
}
int main()
{
LinkList La;
int n;
cin>>n;
CreatList(La,n);
ReverseList(La);
ShowList(La);
return 0;
}