鱼C论坛

 找回密码
 立即注册
查看: 2804|回复: 0

[学习笔记] 单链表LA=(a1,a2,…,am)和LB=(b1,b2,…,bn),编写程序按以下规则将它们合并...

[复制链接]
发表于 2021-5-18 18:12:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/*

开发者:慢蜗牛 开发时间:2020.6.11

程序功能:合并链表

*/

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define LEN sizeof(struct L)

void print(struct L* head);
void insert(struct L* p1, struct L* p2);

struct L//创建结构体
{
int a;

struct L* next;
};

int n;

struct L* creat()//建立链表
{
struct L* head;

struct L* p1, * p2;

n = 0;

p1 = p2 = (struct L*)malloc(LEN);

scanf_s("%d", &p1->a);

head = NULL;

while (p1->a != -1)
{
    n = n + 1;

    if (n == 1) head = p1;

    else p2->next = p1;

    p2 = p1;

    p1 = (struct L*)malloc(LEN);

    scanf_s("%d", &p1->a);
}

p2->next = NULL;

return(head);
}

void print(struct L* head)//输出具有头结点的列表
{
struct L* p;

p = head->next;

if (head != NULL)
    do
    {
        printf("--%d ", p->a);

        p = p->next;
    } while (p != NULL);
}

void insert(struct L* p1, struct L* p2)//从小到大合并递增链表
{
struct L* LC, * r;

LC = (struct L*)malloc(LEN);

LC->next = p1;

r = LC;

while (p1 && p2)
{
    if (p1->a <= p2->a)
    {
        r->next = p1;

        r = p1;

        p1 = p1->next;
    }

    else
    {
        r->next = p2;

        r = p2;
    
        p2 = p2->next;
    }

}
if (p1 == NULL) r->next = p2;

else r->next = p1;

print(LC);
}

void main()//主函数
{
struct L* LA, * LB;

printf("请输入LA的数据:");

LA = creat();

printf("请输入LB的数据:");

LB = creat();

printf("LC=");

insert(LA, LB);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 01:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表