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

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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值