单链表的就地逆置
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
读入数据构造一个单链表,实现单链表的就地逆置。
输入
先输入一个小于100的正整数n,再从小到大的输入n个正整数,建立一个单链表,然后实现单链表的就地逆置。
输出
按顺序输出逆置后的单链表的所有元素,每个元素占一行。
输入样例
3
300 3000 50000
输出样例
50000
3000
300
#include <stdio.h>
#include <stdlib.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode,*LinkList;
LinkList CreateList(LinkList L)
{
LinkList p,s;
int n;
scanf("%d",&n);
p=L=(LinkList)malloc(sizeof(Lnode));
L->next=NULL;
//printf("test\n");
for(;n>0;n--)
{
s=(LinkList)malloc(sizeof(Lnode));
scanf("%d",&s->data);
p->next=s;
p=s;
}
p->next=NULL;
return L;
}
LinkList InverseList(LinkList L)
{
LinkList p,q=NULL;
L=CreateList(L);
p=L->next;
while(p->next->next)
{
q=p->next;
p->next=q->next;
q->next=L->next;
L->next=q;
}
p->next->next=L->next;
L->next=p->next;
p->next=NULL;
return L;
}
int main()
{
LinkList p1,L;
p1=InverseList(L);
p1=p1->next;
while(p1)
{
printf("%d\n",p1->data);
p1=p1->next;
}
free(p1);
return 0;
}