建立一个链表,输入5个数据元素,利用桟将链表逆置

img

img

img

img


这些是参考资料

啥意思?你都有代码了吗?
意思是要建立一个链表,还要建立一个栈?
把链表元素存入栈,然后从栈顶逐个提取,按链表顺序存入数据就倒过来了

代码如下,如有帮助,请帮忙采纳一下,谢谢。

img

代码:

#include<stdio.h>
#include <stdlib.h>
#define MAXLEN 10

typedef struct node 
{
    int data;
    struct node* next;
}NODE;



typedef NODE* elementtype;

typedef struct  
{
    elementtype element[MAXLEN];
    int top;
}SqStack;



SqStack InitStack_sq()
{
    SqStack s;
    s.top = -1;
    return s;
}

int GetTop_sq(SqStack* s,elementtype* x)
{
    *x = s->element[s->top];
    return 1;
}

int Push_sq(SqStack* s,elementtype x)
{
    if(s->top == MAXLEN-1)
        return 0;

    s->top++;
    s->element[s->top] = x;
    return 1;
}

int Pop_sq(SqStack* s,elementtype* x)
{
    if(s->top == -1)
        return 0;
    *x = s->element[s->top];
    s->top--;
}



NODE* create()
{
    NODE* head=0,*q,*p;
    int i;
    
    q = head;
    printf("请输入5个数据(以空格分隔):");
    for (i = 0;i<5;i++)
    {
        q = (NODE*)malloc(sizeof(NODE));
        scanf("%d",&q->data);
        q->next = 0;
        if(head == 0)
        {
            head = q;
            p = head;
        }else
        {
            p->next = q;
            p = q;
        }
    }
    return head;
}

//显示链表
void show(NODE* head)
{
    printf("链表数据:");
    while(head)
    {
        printf("%d ",head->data);
        head = head->next;
    }
}


int main()
{
    NODE* t,*p;
    NODE* head = create();
    SqStack sk = InitStack_sq();
    printf("逆序前");
    show(head); //显示原来的链表
    while(head)
    {
        Push_sq(&sk,head);
        head = head->next;
    }
    //出栈
    head = 0;
    while(Pop_sq(&sk,&t))
    {
        if(head == 0)
        {
            head = t;
            head->next = 0;
            p = head;
        }else
        {
            p->next = t;
            p = t;
        }
    }
    p->next = 0;
    printf("\n逆序后");
    show(head);

    //释放空间
    while(head)
    {
        p = head->next;
        free(head);
        head = p;
    }
    head = 0;

    return 0;
}