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

题目

合并单链表 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;

你的问题不止一个,这种算法压根就没法达到合并的目的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐