sefdgs 2023-11-27 01:11 采纳率: 50%
浏览 6
已结题

两个链表连接失败,中间出现个随机数

用C语言创建两个链表,把两个链表连接后输出,链表合并后输出的新链表之间有个随机数,请问这是什么情况?

img


代码如下:

#include<stdio.h>
#include<stdlib.h>
typedef struct list
{
    int data;
    struct list *next;
}list,*LinkList;

LinkList CreateList();
LinkList connect(LinkList h1,LinkList h2);
void print(LinkList h3);
int main()
{
    LinkList p1,p2,p3;
    p1=CreateList();
    p2=CreateList();
    p3=connect(p1,p2);
    print(p3);
}

LinkList CreateList()
{
    int i,n;
    LinkList Head,p,q;
    printf("请输入链表的长度:");
    scanf("%d",&n);
    Head=malloc(sizeof(LinkList));
    Head->next=NULL;
    p=Head;
    for(i=0;i<n;i++)
    {
        q=malloc(sizeof(LinkList));
        scanf("%d",&(q->data));
        p->next=q;//把新节点加入到链表中
        p=q;//p指向新的结点
    }
    p->next=NULL;//设置链表结束标志符

    return Head;
}

LinkList connect(LinkList h1,LinkList h2)
{
    LinkList Head1;
    Head1=h1;
    while (Head1->next)
    {
        Head1=Head1->next;
    }
    Head1->next=h2;   

    return h1;   
}

void print(LinkList h3)
{
    LinkList p=h3->next;
    while (p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    
    return;
}



  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-11-27 10:08
    关注

    两个链表都是带头结点的,合并链表时将第二个链表的头结点也链入了,而头结点是没有用到的,所以出现随机数。代码还有其他几处小问题,一并修改如下,改动处见注释,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct list
    {
        int data;
        struct list* next;
    }list, * LinkList;
    
    LinkList CreateList();
    LinkList connect(LinkList h1, LinkList h2);
    void print(LinkList h3);
    int main()
    {
        LinkList p1, p2, p3;
        p1 = CreateList();
        p2 = CreateList();
        p3 = connect(p1, p2);
        print(p3);
    }
    
    LinkList CreateList()
    {
        int i, n;
        LinkList Head, p, q;
        printf("请输入链表的长度:");
        scanf("%d", &n);
        Head = (LinkList)malloc(sizeof(list)); //Head = malloc(sizeof(LinkList)); 修改
        Head->next = NULL;
        p = Head;
        for (i = 0; i < n; i++)
        {
            q = (LinkList)malloc(sizeof(list));  //q = malloc(sizeof(LinkList)); 修改
            scanf("%d", &(q->data));
            p->next = q;//把新节点加入到链表中
            p = q;//p指向新的结点
        }
        p->next = NULL;//设置链表结束标志符
    
        return Head;
    }
    
    LinkList connect(LinkList h1, LinkList h2)
    {
        LinkList Head1;
        Head1 = h1;
        while (Head1->next)
        {
            Head1 = Head1->next;
        }
        Head1->next = h2->next; //Head1->next = h2; 修改
        free(h2);               // 修改
        return h1;
    }
    
    void print(LinkList h3)
    {
        LinkList p = h3->next;
        while (p != NULL)
        {
            printf("%d ", p->data);
            p = p->next;
        }
        return;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月5日
  • 已采纳回答 11月27日
  • 修改了问题 11月27日
  • 创建了问题 11月27日

悬赏问题

  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥15 关于#sql#的问题,请各位专家解答!
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂