大二的时候,没打算考研,学了一年的java,数据结构学的也比较零散,没系统的学过,这学期打算考研,就把系统结构系统的学习一遍吧。
02-线性结构1 两个有序链表序列的合并 (15 分)
题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。
函数接口定义:
List Merge( List L1, List L2 );
其中List结构定义如下:
typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
L1和L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1和L2合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的带头结点的链表头指针。
~~一开始没注意到带头结点 ~~
这题不难,主要是合并后,L1和L2的这俩链表的输出为空,让L1和L2的指针域指向空就好了
大二的时候,没打算考研,学了一年的java,数据结构学的也比较零散,没系统的学过,这学期打算考研,就把系统结构系统的学习一遍吧。
02-线性结构1 两个有序链表序列的合并 (15 分)
题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。
函数接口定义:
List Merge( List L1, List L2 );
其中List结构定义如下:
typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
L1和L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1和L2合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的带头结点的链表头指针。
~~一开始没注意到带头结点 ~~
这题不难,主要是合并后,L1和L2的这俩链表的输出为空,让L1和L2的指针域指向空就好了
List Merge(List L1, List L2) {
List list = (List) malloc(sizeof(struct Node));
List La, Lb, Lc;
La = L1->Next;
Lb = L2->Next;
Lc = list;
// 比较结点中的大小值,将较小的先添加到目标链表中
while (La && Lb) {
if (La->Data <= Lb->Data) {
Lc->Next = La;
Lc = La;
La = La->Next;
} else {
Lc->Next = Lb;
Lc = Lb;
Lb = Lb->Next;
}
}
// La后记不为空 继续添加,否则添加b 都是空,不可能的
Lc->Next = La != NULL ? La : Lb;
L1->Next = NULL;
L2->Next = NULL;
return list;
}
贴一张结果