行者的路 2017-03-17 12:40 采纳率: 100%
浏览 1984
已采纳

数据结构关于合并链表的算法:合并两个链表,但最终输出结果始终是第二个链表的值

题目

合并单链表 LA = (2,2,3),LB = (1,3,3,4)为 LC = (1,2,2,3,3,3,4)。要求是LC利用LA和LB元素的结点空间建表,不能额外申请结点空间。

问题

程序没有语法错误,修改许多次,但输出结果总是链表LB的值。望有人能帮助分析一下输出结果错误的原因。感激不尽。

代码如下

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

typedef struct Node
{
    char data;
    struct Node * next;
}Node, * LinkList;

void InitList(LinkList * L);
void CreateFromTail(LinkList L);
LinkList MergeLinkList(LinkList LA, LinkList LB);
void output(LinkList L);

int main()
{
    LinkList LA, LB, LC;

    InitList(&LA); //初始化单链表LA
    printf("输入链表LA的值: ");
    CreateFromTail(LA); 

    InitList(&LB); //初始化单链表LB
    printf("输入链表LB的值: ");
    CreateFromTail(LB);

    LC= MergeLinkList(LA, LB); //合并单链表
    printf("合并后链表LC的值为: ");
    output(LC);

    return 0;
}
void InitList(LinkList * L) //初始化单链表
{
    (* L) = (LinkList)malloc(sizeof(Node));
    (* L)->next = NULL;
}
void CreateFromTail(LinkList L) //尾插法建表
{
    Node * r, * s;
    r = L;
    int flag = 1;
    char c;
    while(flag)
    {
        c = getchar();
        if(c != '$')
        {
            s = (Node *)malloc(sizeof(Node));
            s->data = c;
            r->next = s;
            r = s;
        }
        else
        {
            flag = 0;
            r->next = NULL;
        }
    }
}
LinkList MergeLinkList(LinkList LA, LinkList LB) //合并链表LA和LB
{
    Node * pa, * pb, * r;
    LinkList LC;
    LC = LA; //将LC置为空表,且不额外分配结点空间
    LC->next = NULL;
    pa = LA->next; //让pa指向链表LA的第一个元素
    pb = LB->next; //让pb指向链表LB的第一个元素
    r = LC;

    while(pa != NULL && pb != NULL)
    {
        if(pa->data <= pb->data)
        {
            r->next = pa;
            r = pa;
            pa = pa->next;
        }
        else
        {
            r->next = pb;
            r = pb;
            pb = pb->next;
        }
    }
    if(pa)
        r->next = pa;
    else
        r->next = pb;

    free(LB);
    return(LC);
}
void output(LinkList L) //输出链表
{
    LinkList p = L->next;
    while(p != NULL)
    {
        printf("%c ", p->data);
        p = p->next;
    }
    printf("\n");
}

运行结果

图片说明

  • 写回答

2条回答 默认 最新

  • 关注

    LC和LA都是指针,赋值之后,清空LC就等于清空LA了

         LinkList LC;
        LC = LA; //将LC置为空表,且不额外分配结点空间
        LC->next = NULL;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)