给定单链表的头指针Head,可以将链表反向,一种方法利用指针直接赋值,一种借助stack先进后出的特性
#include
<
iostream
>
#include < stack >
using namespace std;
struct node
... {
int i;
node* next;
} ;
void reverse1(node ** head)
... {
node* p1;
node* p2;
p1=*head;
p2=p1->next;
(*head)->next=NULL;
while(p2)
...{
p1=p2->next;
p2->next=*head;
*head=p2;
p2=p1;
}
}
void reverse2(node ** head)
... {
stack<node*> S;
node* temp=*head;
while(temp)
...{
S.push(temp);
temp=temp->next;
}
*head=S.top();
S.pop();
temp=*head;
while(!S.empty())
...{
temp->next=S.top();
S.pop();
temp=temp->next;
temp->next=NULL;
}
}
int main()
... {
node* head=new node;
head->i=0;
head->next=NULL;
node* temp=head;
int i;
for(i=1;i<10;++i)
...{
temp->next=new node;
temp=temp->next;
temp->i=i;
temp->next=NULL;
}
temp=head;
while(temp)
...{
cout<<temp->i<<endl;
temp=temp->next;
}
reverse1(&head);
temp=head;
while(temp)
...{
cout<<temp->i<<endl;
temp=temp->next;
}
reverse2(&head);
temp=head;
while(temp)
...{
cout<<temp->i<<endl;
temp=temp->next;
}
return 0;
}
#include < stack >
using namespace std;
struct node
... {
int i;
node* next;
} ;
void reverse1(node ** head)
... {
node* p1;
node* p2;
p1=*head;
p2=p1->next;
(*head)->next=NULL;
while(p2)
...{
p1=p2->next;
p2->next=*head;
*head=p2;
p2=p1;
}
}
void reverse2(node ** head)
... {
stack<node*> S;
node* temp=*head;
while(temp)
...{
S.push(temp);
temp=temp->next;
}
*head=S.top();
S.pop();
temp=*head;
while(!S.empty())
...{
temp->next=S.top();
S.pop();
temp=temp->next;
temp->next=NULL;
}
}
int main()
... {
node* head=new node;
head->i=0;
head->next=NULL;
node* temp=head;
int i;
for(i=1;i<10;++i)
...{
temp->next=new node;
temp=temp->next;
temp->i=i;
temp->next=NULL;
}
temp=head;
while(temp)
...{
cout<<temp->i<<endl;
temp=temp->next;
}
reverse1(&head);
temp=head;
while(temp)
...{
cout<<temp->i<<endl;
temp=temp->next;
}
reverse2(&head);
temp=head;
while(temp)
...{
cout<<temp->i<<endl;
temp=temp->next;
}
return 0;
}