复习下C++ 单链表反转
思路:
在顺序读取链表的过程中,对每个节点逐个进行反转
首先创建单链表
struct LinkNode
{
int NodeData;
LinkNode *next;
};
LinkNode * createLink()
{
LinkNode * head=new LinkNode;
head->NodeData=0;
head->next=NULL;
LinkNode *p=head;
for(int i=1;i<10;i++)
{
LinkNode *newnode=new LinkNode;
newnode->NodeData =i;
newnode->next=NULL;
p->next=newnode;
p=newnode;
}
return head;
}
对链表进行反转
LinkNode *reverse(LinkNode *head)
{
LinkNode *p,*q,*temp;
if(head == NULL|| head->next == NULL)
return head;
p=head;
q=p->next;
while(q->next!=NULL)
{
temp = q->next;
q->next=p;
p=q;
q=temp;
}
q->next=p;
head->next=NULL;
return q;
}
下面是完整的代码
#include<iostream>
using namespace std;
struct LinkNode
{
int NodeData;
LinkNode *next;
};
LinkNode * createLink()
{
LinkNode * head=new LinkNode;
head->NodeData=0;
head->next=NULL;
LinkNode *p=head;
for(int i=1;i<10;i++)
{
LinkNode *newnode=new LinkNode;
newnode->NodeData =i;
newnode->next=NULL;
p->next=newnode;
p=newnode;
}
return head;
}
LinkNode *reverse(LinkNode *head)
{
LinkNode *p,*q,*temp;
if(head == NULL|| head->next == NULL)
return head;
p=head;
q=p->next;
while(q->next!=NULL)
{
temp = q->next;
q->next=p;
p=q;
q=temp;
}
q->next=p;
head->next=NULL;
return q;
}
int main()
{
LinkNode *head,*reversehead,*showlink,*reverselink,*showreverselink;
head=createLink();
showlink=head;
reversehead=head;
cout<<"showlink data is:"<<endl;
while(showlink->next!=NULL)
{
cout<<showlink->NodeData<<'\t';
showlink=showlink->next;
}
cout<<showlink->NodeData<<endl;
cout<<"reverselink data is:"<<endl;
reverselink=reverse(reversehead);
showreverselink=reverselink;
while(showreverselink->next!=NULL)
{
cout<<showreverselink->NodeData<<'\t';
showreverselink=showreverselink->next;
}
cout<<showreverselink->NodeData<<endl;
}