题目:链表操作,单链表就地逆置
例如,初始链表顺序为12345678,现在使其输出结果87654321
#include<iostream>
using namespace std;
//定义链表的结点结构体
typedef struct node
{
int data;
node *next;
}node;
//创建完整单链表,尾插入法使其实现链表结构
void createList(node *link)
{
(*link).data=1;
(*link).next=NULL;
node *tail=link;
for(int i=2;i<=8;++i)
{
node *e=new node();
(*e).data=i;
(*e).next=NULL;
(*tail).next=e;
tail=e;
}
}
//打印链表结构,便于检查结果
void printList(node *link)
{
for(int i=1;i<=8;++i)
{
cout<<(*link).data;
link=(*link).next;
}
cout<<endl;
}
//就地逆置链表,主要是控制三个结点之间的过渡关系
node* reverseList(node *link)
{
node *Lpre=link;
node *Lcur=(*link).next,*Lnext=(*link).next;
(*link).next=NULL;
while(Lnext)
{
Lnext=(*Lnext).next;
(*Lcur).next=Lpre;
Lpre=Lcur;
Lcur=Lnext;
}
return Lpre;
//返回头结点
}
int main()
{
node *p=new node();
createList(p);
printList(p);
node *cur=reverseList(p);
printList(cur);
return 0;
}