单链表的就地逆置
2017-03-10 21:31
211 查看
单链表的就地逆置
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
读入数据构造一个单链表,实现单链表的就地逆置。
输入
先输入一个小于100的正整数n,再从小到大的输入n个正整数,建立一个单链表,然后实现单链表的就地逆置。
输出
按顺序输出逆置后的单链表的所有元素,每个元素占一行。
输入样例
3
300 3000 50000
输出样例
50000
3000
300
时限: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; }