代码如下:
#include<stdio.h>
#include<stdlib.h>
struct node {
int num;
struct node* nextptr;
};
void createlisthead(struct node** headptrptr)
{
*headptrptr = (struct node*)malloc(sizeof(struct node*));
if (*headptrptr != NULL)
{
(*headptrptr)->nextptr = NULL;
}
}
void insert(struct node* headptr, int number)
{
struct node* newptr=NULL;
struct node* currentptr = NULL;
struct node* previousptr = NULL;
newptr = (struct node*)malloc(sizeof(struct node));
if (newptr != NULL)
{
newptr->num = number;
newptr->nextptr = NULL;
previousptr = headptr;
currentptr = previousptr->nextptr;
while (currentptr != NULL)
{
previousptr = currentptr;
currentptr = currentptr->nextptr;
}
previousptr->nextptr = newptr;
}
}
struct node* getlast(struct node* headptr)
{
struct node* previousptr = headptr;
struct node* currentptr = previousptr->nextptr;
while (currentptr != NULL)
{
previousptr = currentptr;
currentptr = currentptr->nextptr;
}
return previousptr;
}
void reverselist(struct node* headptr, struct node* lastptr)
{
struct node* firstptr = headptr->nextptr;
headptr->nextptr=lastptr;
struct node* previousptr, *currentptr, *temptr;
previousptr = firstptr;
currentptr = previousptr->nextptr;
firstptr->nextptr = NULL;
while (currentptr != NULL)
{
temptr = currentptr->nextptr;
currentptr->nextptr=previousptr;
previousptr = currentptr;
currentptr = temptr;
}
lastptr = firstptr;
}
void printlist(struct node* headptr)
{
struct node* currentptr = headptr->nextptr;
while (currentptr != NULL)
{
printf_s("%d ", currentptr->num);
currentptr = currentptr->nextptr;
}
}
int main()
{
struct node* headptr;
createlisthead(&headptr);
int n = 0;
scanf_s("%d", &n);
while (n != -1)
{
insert(headptr, n);
scanf_s("%d", &n);
}
struct node* lastptr = getlast(headptr);
reverselist(headptr, lastptr);
printlist(headptr);
return 0;
}