7-11 单链表就地逆置 (10 分)
输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表进行就地逆置(不增加新结点),并输出逆置后的单链表数据。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入多个整数,以-1作为该组测试的结束(-1不处理)。
输出格式:
对于每组测试,输出逆置后的单链表数据(数据之间留一个空格)。
输入样例:
1
1 2 3 4 5 -1
输出样例:
#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
int data;
struct node *next;
} lnode;
lnode *created()
{
lnode *head,*p,*tail;
int n;
head=(node*)malloc(sizeof(lnode));
head->next=NULL;
tail=head;
while(scanf("%d",&n)!=EOF&&n!=-1)
{
p=(node*)malloc(sizeof(lnode));
p->data=n;
tail->next=p;
tail=p; p->next=NULL;
}
return head;
}
void nizhi(lnode *head)
{
struct node *p,*q;
p=head->next;
head->next=NULL;
q=p->next;
while(p)
{
p->next=head->next;head->next=p;
p=q;
if(q)
q=q->next;
}
}
void shuchu(lnode *head)
{
lnode *p;
p=head->next;
if(!p)cout<<"NULL";
while(p)
{
cout<<p->data;
if(!p->next)
cout<<"\n";
else cout<<" ";
p=p->next;
}
}
int main()
{int t;
lnode *head;
cin>>t;
for(int i=0;i<t;i++)
{
head=created();
nizhi(head);
shuchu(head);
}
return 0;
}
5 4 3 2 1