输入若干个不超过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<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node* next;
}list;
list* getlist(int num){
//接收个数
list *head,*tail,*datanode;
int dat=0;
head=(list*)malloc(sizeof(list));
tail=head;
while(num>0){
scanf("%d",&dat);
datanode=(list*)malloc(sizeof(list));
datanode->data=dat;
tail->next=datanode;//注意是把新数据的地址赋给tail指针,实现tail的next指向新数据
tail=datanode;//注意是把新数据的地址赋给tail,实现tail指向新数据
num--;
}
datanode->next=NULL;
return head->next;
}
void reverse(list *l1,list *l2,int num) {
int temp;
while (num>0)
{
temp=num;
l1=l2;
while(temp>1){
l1=l1->next;
temp--;
}
printf("%d",l1->data);
if(num>1){
printf(" ");
}
num--;
}
}
int main(){
int group,n=0;
int num;
scanf("%d",&group);
while(group>0)
{
list *l1,*l2;
scanf("%d",&num);
l1=getlist(num);
l2=l1;
reverse(l1,l2,num);
printf("\n");
group--;
}
return 0;
}