链表的逆置
前言
用于个人学习过程记录
题目
输入若干个不超过100的整数,建立单链表,然后将链表中所有结点的链接方向逆置,要求仍利用原表的存储空间。输出逆置后的单链表。
输入格式:
首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据在一行上输入数据个数n及n个不超过100的整数。
输出格式:
对于每组测试,输出逆置后的单链表,每两个数据之间留一个空格。
输入样例:
1
11 55 50 45 40 35 30 25 20 15 10 5
输出样例:
5 10 15 20 25 30 35 40 45 50 55
代码
#include<iostream>
using namespace std;
struct LNode{
int data;
LNode *next;
};
struct LinkList{
LNode *head;
void Init();
void create(int n);
void Traverse();
};
void LinkList::Init(){
head=new LNode;
head->next=NULL;
}
void LinkList::create(int n){
Init();
LNode *p = head;
while(n--){
LNode *q= new LNode;
cin>>q->data;
q->next=p->next;
p->next=q;
p=q;
}
}
void reverseList(LinkList La){
LNode *p=La.head->next;
La.head->next=NULL;
while(p){
LNode *q=p;
p=p->next;
q->next=La.head->next;
La.head->next=q;
}
}
void LinkList::Traverse(){
LNode *p=head->next;
while(p){
if(p!=head->next) cout<<" ";
cout<<p->data;
p=p->next;
}
cout<<endl;
}
int main(){
int T;
cin>>T;
while(T--){
int n;
LinkList a;
cin>>n;
a.create(n);
reverseList(a);
a.Traverse();
}
}