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

数据结构实验之链表三:链表的逆置

2019-01-18 19:58 92 查看

Problem Description
输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表的数据进行逆置,并输出逆置后的单链表数据。
Input
输入多个整数,以-1作为结束标志。
Output
输出逆置后的单链表数据。
Sample Input

12 56 4 6 55 15 33 62 -1

Sample Output

62 33 15 55 6 4 56 12

Hint
不得使用数组。
Source

#include <stdio.h>
#include <stdlib.h>
struct lqc//构建结构体
int data;
struct lqc *next;
};

int main()
{
int n;
struct lqc *head,*tail,*p,*q;//四个指针!!!!!!
head=(struct lqc*)malloc(sizeof(struct lqc));//分配空间
head->next=NULL;//头指针指向空白NULL
tail=head;//尾指针,常用于顺序建立指针
while(7)//这个判断语句为随机的一个正数!为了使循环进行下去!!循环中有break可以跳出循环
{
scanf("%d",&n);
if(n==-1)
{
break;//此时即可跳出循环
}
p=(struct lqc*)malloc(sizeof(struct lqc));//分配空间(注意书写格式)
p->data=n;//p的数值为n
p->next=tail->next;//p-》next此时发生改变,指向NULL
tail->next=p;//此时head-》next指向p
tail=p;//tail尾指针发生改变,向前移动
}
p=head->next;
q=p->next;
head->next=NULL;//这三行为循环前的操作!!
while(p!=NULL)//循环判断
{
q=p;
p=p->next;
q->next=head->next;
head->next=q;//这一循环变化过程比较容易搞混,建议画出图,第二次循环为发生重大变化的时期!!
}
p=head->next;//输出前的操作
printf("%d",p->data);//输出第一个前边没有空格
p=p->next;//p向前移动!!
while(p)//表示当p不是NULL时循环继续
{
printf(" %d",p->data);
p=p->next;
}
printf("\n");//注意最后的换行符号
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: