#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct Node* PtrToNode;
typedef PtrToNode List;
struct Node {
ElementType data;
PtrToNode next;
};
//输出无头结点链表L。
void printList(List L)
{
PtrToNode p = L;
while (p)//当结点存在时
{
printf("%d -> ", p->data);
p = p->next;
}
printf("end\n");
}
//合并两个不带头结点的有序递增链表,返回新的头指针
List merge(List L1, List L2)
{
//建立一个不带头结点的空链表L3
List L3 = NULL;
//声明尾指针rear指向L3尾结点,初始化为NULL
PtrToNode rear = NULL;
//当L1和L2没有被清空时
while (L1 && L2)
{
//如果L1比较小,将L1当前结点摘除,复制到L3末尾
if (L1->data < L2->data)
{
if (L3)//L3不为空,一般情况
{
rear->next = L1;//L3的尾结点指向新的尾结点
L1 = L1->next;//摘除L1的当前结点
rear->next->next = NULL;//设置新尾结点指针域为空
rear = rear->next;//设置rear指向新的尾结点
}
else//L3为空,插入第一个结点,要特殊处理
{
L3 = L1;
L1 = L1->next;
两个递增链表的合并(不带头节点)
最新推荐文章于 2024-07-19 17:08:05 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)