试编写算法,键盘输入一组元素,以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;
}