NOTICE: 本题代码是按照源码顺序粘贴的,复制可直接运行
环境: Visual Stdio Code
题目
设线性表 A=(a1, a2, ..., am),B=(b1, b2,..., bn) ,试写一个按下列规则合并
A,B为线性表 C的算法,即使得
C = (a1, b1,..., am, bm, bm+1,..., bn) 当 m <= n 时;
C= (a1, b1,..., an, bn, an+1, ..., am) 当 m >= n 时;
线性表 A,B和 C均以单链表作存储结构,且 C表利用 A表和 B 表中的结点空间 构成。注意:单链表的长度值 m和 n 均未显式存储。
分析
可以看出,不论是 A 的长度长还是 B 的长度长,最终 C 链表中的首元结点都是 A 链表的首元结点,所以只需要让 C = A 即可。
本算法的大致方法就是多次插入,即:将 B 链表中的元素插入 A 链表中,最后再处理一下长度的问题即可。
处理长度可以利用如下思路:
当 A 链表长度大时直接正常插入就行(因为 B 链表长度较短,所以当循环到大于 B 链表之后就是单纯的遍历 A 链表的剩下节点);
当 B 链表长度大时,循环完成之后需要将 A 链表的最后一个节点的 next 指向 B 链表剩下的节点。
代码:
初始化:
#include<stdio.h>
#includ