您的位置:首页 > 理论基础 > 数据结构算法

单链表的就地逆置

2017-03-10 21:31 211 查看
单链表的就地逆置
时限: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息