单链表的归并

#include <stdio.h>

#include <stdlib.h>

typedef struct Node

{

int data;

struct Node *next;

} Node, *LinkList;

void CreateFromTail(Node *head, int num); // 尾插法建表,num为链表长度

void SelectionSort(LinkList head, int num); // 选择排序法,num为整合后的链表C长度

int main()

{

LinkList Ahead, Bhead; // 创建A,B单链表

Ahead = (Node *)malloc(sizeof(Node));

Bhead = (Node *)malloc(sizeof(Node));

Node *Aend = Ahead, *Bend = Bhead, *pri = Ahead, *t = Ahead;

int Alength, Blength; // 单链表长度

scanf("%d %d", &Alength, &Blength);

CreateFromTail(Ahead, Alength); // 建表

CreateFromTail(Bhead, Blength);

for (int i = 0; i < Alength; i++)

{

t = t->next;

}

t->next = Bhead->next; // 将A,B链表连接

SelectionSort(Ahead, Alength + Blength); // 排序

for (int i = 0; i < Alength + Blength; i++)

{

pri = pri->next;

printf("%d ", pri->data); // 输出整合后的链表C

}

return 0;

}

void CreateFromTail(LinkList head, int num)

{

Node *insert, *end = head;

int data; //链表数据

for (int i = 0; i < num; i++)

{

scanf("%d", &data);

insert = (Node *)malloc(sizeof(Node));

insert->data = data;

end->next = insert;

end = insert;

end->next = NULL;

}

}

void SelectionSort(LinkList head, int num)

{

Node *left = head, *right = head, *sign;

int t;

for (int i = 0; i < num - 1; i++)

{

left = left->next;//left 代表要交换的数据,right用于遍历链表,sign代表另一个要交换的数据

right = left;

sign = left;

for (int j = i + 1; j < num; j++)

{

right = right->next;

if (right->data >= sign->data)

{

sign = right;

}

}

t = left->data;

left->data = sign->data;

sign->data = t;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流光焰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值