您的位置:首页 > 编程语言 > C语言/C++

C++ 单链表反转

2015-02-04 10:41 357 查看
 

复习下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;

}



 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: