白月霜尘 2022-03-13 09:31 采纳率: 100%
浏览 28
已结题

这个有头结点链表哪里错了,好像结点没有连上,不加头结点最多一个结点,end指向最后一个结点

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct LinkList
{
int m_Num;
struct LinkList*next;
}List;
void showMenu()
{
printf("**************\n");
printf("**1.添加节点**\n");
printf("**2.遍历链表**\n");
printf("**3.查找节点**\n");
printf("**4.删除节点**\n");
printf("**5.插入节点**\n");
printf("**************\n");
}
void addList(List*end,List*head)
{
end->next=(List*)malloc(sizeof(List));
end=end->next;
printf("请输入该节点编号:");
scanf("%d",&end->m_Num);
end->next=NULL;
(head->m_Num)++;
printf("成功添加节点");
}
void scanList(List*head)
{
if(head->m_Num==0) printf("当前链表没有节点");
else
{
List*tmp=head->next;
printf("当前共有%d个节点\n",head->m_Num);
while(tmp!=NULL)
{
printf("%d\n",tmp->m_Num);
tmp=tmp->next;
}
}
}
int main()
{
List*head=(List*)malloc(sizeof(List));
head->next=NULL;
List*end=head;
head->m_Num=0;
int choose=0;
while(1)
{
showMenu();
scanf("%d",&choose);
switch(choose)
{
case 1:
{
addList(end,head);
system("pause");
system("cls");
}
break;
case 2:
{
scanList(head);
system("pause");
system("cls");
}
break;
case 3:
break;
default:
break;
}
}
return 0;
}
  • 写回答

3条回答 默认 最新

  • 关注

    你创建节点的时候每次返回end就好了,这样就不会丢失了

    img

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    typedef struct LinkList
    {
        int m_Num;
        struct LinkList*next;
    } List;
    void showMenu()
    {
        printf("**************\n");
        printf("**1.添加节点**\n");
        printf("**2.遍历链表**\n");
        printf("**3.查找节点**\n");
        printf("**4.删除节点**\n");
        printf("**5.插入节点**\n");
        printf("**************\n");
    }
    List* addList(List*end,List*head)
    {
        end->next=(List*)malloc(sizeof(List));
        end=end->next;
        printf("请输入该节点编号:");
        scanf("%d",&end->m_Num);
        end->next=NULL;
        (head->m_Num)++;
        printf("成功添加节点");
        return end;
    }
    void scanList(List*head)
    {
        if(head->m_Num==0)
            printf("当前链表没有节点");
        else
        {
            List*tmp=head->next;
            printf("当前共有%d个节点\n",head->m_Num);
            while(tmp!=NULL)
            {
                printf("%d\n",tmp->m_Num);
                tmp=tmp->next;
            }
        }
    }
    int main()
    {
        List*head=(List*)malloc(sizeof(List));
        head->next=NULL;
        List*end=head;
        head->m_Num=0;
        int choose=0;
        while(1)
        {
            showMenu();
            scanf("%d",&choose);
            switch(choose)
            {
            case 1:
            {
                end=addList(end,head);
                system("pause");
                system("cls");
            }
            break;
            case 2:
            {
                scanList(head);
                system("pause");
                system("cls");
            }
            break;
            case 3:
                break;
            default:
                break;
            }
        }
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月21日
  • 已采纳回答 3月13日
  • 创建了问题 3月13日

悬赏问题

  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 第一行输入n,第二行输入a b c输出的字符向后平移n个位置,当移动到z时,重新返回a开始
  • ¥15 为什么跑这个代码,文件显示不在呀
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 GPT写作提示指令词
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥20 关于DAC输出1.000V对分辨率和精度的要求