羊羊茶! 2023-08-15 17:30 采纳率: 100%
浏览 16
已结题

单循环链表头插法遍历完直接退出来是怎么回事呀

单循环链表头插法遍历完直接退出来是怎么回事呀?

#define _CRT_SECURE_NO_WARNINGS 1

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

#define BOOL int
#define FALSE 0
#define TRUE 1

typedef struct link{
    int data;
    struct link* next;
}LinkList;

BOOL InitList(LinkList* L); //初始化
void List_HeadInsert(LinkList* L);//头插法
void List_TailInsert(LinkList* L);//尾插法,正序输入
void display(struct link* p);



int main()
{
    LinkList L; LinkList P;
    List_TailInsert(&L);
    List_HeadInsert(&P);
    
    printf("BYE");
    
    return 0;
}

BOOL InitList(LinkList* L)
{
    L = (LinkList*)malloc(sizeof(LinkList));
    if (L == NULL)
    {
        printf("内存不足");
        return FALSE;
    }
    L->next = L;
    return TRUE;
}

void List_HeadInsert(LinkList* L)
{
    InitList(L);
    int x;
    LinkList* temp = L;
    printf("请输入数据:");
    scanf("%d", &x);
    while (x != 0)
    {
        LinkList* a = (LinkList*)malloc(sizeof(LinkList));
        a->data = x;
        a->next = temp->next;
        temp->next = a;
        printf("请再次输入(输入0结束插入):");
        scanf("%d", &x);
    }
    
    display(L);
}

void List_TailInsert(LinkList* L)
{
    InitList(L);
    int x;
    LinkList* temp = L;
    printf("请输入数据:");
    scanf("%d", &x);
    while (x != 0)
    {
        LinkList* a = (LinkList*)malloc(sizeof(LinkList));
        a->data = x;
        temp->next = a;
        temp = a;
        printf("请再次输入(输入0结束插入):");
        scanf("%d", &x);
    }
    temp->next = L;
    display(L);
}

void display(struct link* p)
{
    struct link* t = p->next;  //凭借电视头指针,p->next指向第一个元素的地址
    while (t != p) //链表的最后一个结点是NULL,遇到NULL就会结束
    {
        printf("%d ", t->data);  //遍历数据区
        t = t->next;  //指向下一个结构的地址
    }
    printf("\n");
}```
  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-08-16 15:59
    关注

    修改如下,改动处见注释,供参考:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    #include <stdlib.h>
    
    #define BOOL int
    #define FALSE 0
    #define TRUE 1
    
    typedef struct link {
        int    data;
        struct link* next;
    }LinkList;
    
    BOOL InitList(LinkList* L); //初始化
    void List_HeadInsert(LinkList* L);//头插法
    void List_TailInsert(LinkList* L);//尾插法,正序输入
    void display(struct link* p);
    
    int main()
    {
        LinkList L;
        L.next = &L;   // 修改
    
        LinkList P;
        P.next = &P;  // 修改 
    
        List_TailInsert(&L);
        List_HeadInsert(&P);
    
        printf("BYE");
    
        return 0;
    }
    
    BOOL InitList(LinkList* L)
    {
        L = (LinkList*)malloc(sizeof(LinkList));
        if (L == NULL)
        {
            printf("内存不足");
            return FALSE;
        }
        L->next = L;
        return TRUE;
    }
    
    void List_HeadInsert(LinkList* L)
    {
        //InitList(L);  // 修改
        int x;
        LinkList* temp = L;
        printf("请输入数据:");
        scanf("%d", &x);
        while (x != 0)
        {
            LinkList* a = (LinkList*)malloc(sizeof(LinkList));
            a->data = x;
            a->next = temp->next;
            temp->next = a;
            printf("请再次输入(输入0结束插入):");
            scanf("%d", &x);
        }
    
        display(L);
    }
    
    void List_TailInsert(LinkList* L)
    {
        //InitList(L); // 修改
        int x;
        LinkList* temp = L;
        printf("请输入数据:");
        scanf("%d", &x);
        while (x != 0)
        {
            LinkList* a = (LinkList*)malloc(sizeof(LinkList));
            a->data = x;
            temp->next = a;
            temp = a;
            printf("请再次输入(输入0结束插入):");
            scanf("%d", &x);
        }
        temp->next = L;
        display(L);
    }
    
    void display(struct link* p)
    {
        struct link* t = p->next;  //凭借电视头指针,p->next指向第一个元素的地址
        while (t != p) //链表的最后一个结点是NULL,遇到NULL就会结束
        {
            printf("%d ", t->data);  //遍历数据区
            t = t->next;  //指向下一个结构的地址
        }
        printf("\n");
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月30日
  • 已采纳回答 8月22日
  • 创建了问题 8月15日

悬赏问题

  • ¥15 esp32驱动GC9A01循环播放视频
  • ¥15 惠普360g9的最新bios
  • ¥15 配置hadoop时start-all.sh老是启动失败
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题