关于#链表#的问题:建立单链表L=(1,2,3,4,5),并且逆置单链表L=(5,4,3,2,1)

建立单链表L=(1,2,3,4,5),并且逆置单链表L=(5,4,3,2,1)

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

img

代码:

#include <stdio.h>
#include <stdlib.h>

struct StNode 
{
    int data;
    struct StNode* next;
};

//创建节点
struct StNode* CreateNode(int d)
{
    struct StNode* node = (struct StNode*)malloc(sizeof(struct StNode));;
    node->data = d;
    node->next = 0;
    return node;
}
//创建链表
struct StNode* CreateList()
{
    struct StNode* head,*p,*t;
    int data;
    head = 0;
    p = head;
    t = head;
    
    printf("创建链表,请输入链表数据:");;
    while( 1)
    {
        scanf("%d",&data);
        t = CreateNode(data);
        if(head ==0)
        {
            head = t;
            p = head;
        }
        else
        {
            p->next = t;
            p = t;
        }
        if(getchar() == '\n') break;
    }
    return head;
}
//打印链表
void Display(struct StNode* head)
{
    while(head)
    {
        printf("%d ",head->data);
        head = head->next;
    }
    printf("\n");
}

//链表逆序
StNode* Reverse(struct StNode* head)
{
    struct StNode *next = NULL;
    struct StNode *prev = NULL;
    while (head) 
    {
        next = head->next;
        head->next = prev;
        prev = head;
        head = next;
    }
    return prev;
}




int main()
{
    struct StNode* list1 = CreateList();
    struct StNode* list2 = Reverse(list1);    
    //打印链表
    printf("逆序后的链表:");
    Display(list2);
    return 0;
}