【无标题】单链表逆置

试编写算法,键盘输入一组元素,以0做结束输入的标记,建立一个带头结点的单向链表(无序,且值域为整型),把单向链表(值域为整型)中元素逆置(不允许申请新的结点空间)。

输入:整型,以0作为结束输入的标记,元素不一样有序

输出:逆置后的单链表,元素之间用一个空格分隔

#include <stdio.h>
#include <stdlib.h>
//2023.10.24祝自己早日成为技术大牛

//结构体定义
typedef struct LinkList
{
    int data;
    struct LinkList *next;
}LNode;

//头结点创建
LNode *HeadCreat()
{
    LNode *p=(LNode *)malloc(sizeof(LNode));
    p->next=NULL;
    return p;
}


//增加结点
void AddNode(LNode *p)
{
    LNode *q=NULL;
    while(1)
    {
        q=(LNode *)malloc(sizeof(LNode));
        scanf("%d",&q->data);
        if(q->data==0) break;
        q->next=NULL;
        p->next=q;
        p=p->next;
    }
}

//结点逆置(利用尾插法将链表当前结点和后继结点逆置后链接到原头结点上)
void Inverse(LNode *L)
{
    LNode *p=NULL;
    LNode *q=NULL;
    p=L->next;
    L->next=NULL;
    while(p)
    {
        q=p->next;
        p->next=L->next;
        L->next=p;
        p=q;
    }
}

//输出链表
void PrintList(LNode *L)
{
    L=L->next;
    while(L!=NULL)
    {
        printf("%d ",L->data);
        L=L->next;
    }
}

int main()
{
    LNode *p=NULL;
    p=HeadCreat;
    AddNode(&p);
    Inverse(&p);
    PrintList(&p);

    //printf("Hello world!\n");
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值