首先实现非递增序列的合并,然后删除相同的元素实现递增序列的合并。上面两个算法仍使用原来两个链表的存储空间,不另外占用其它的存储空间。
非递增合并的算法步骤:
1.指针p1和p2初始化,分别指向head1和head2的第一个结点
2.head3的头结点取值为head1的头结点
3.指针p3初始化,指向head3的头结点
4.当指针p1和p2都未到达相应表尾时,则依次比较p1和p2所指的元素值,从表head1和表head2中选取元素值较小的结点插入到head3表的最后
5.将非空表的剩余段插入到head3所指结点之后
6.释放head2的头结点
递增合并和非递增合并大题上相似,当head1表结点的值等于head2表结点的值,删除head2表的结点,然后继续比较。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define false 0
#define ok 1
typedef struct linknode{
int data;
struct linknode *next;
}linknode,*linklist;
//初始化单链表
linklist initList(linklist head){
head=(linknode*)malloc(sizeof(linknode));
if(head==NULL)//如果创建头结点失败
return false;
head->next=NULL;
return head;
}
//尾插法创建单链表

本文介绍了如何通过尾插法创建链表,并详细阐述了两种链表合并方法:非递增序列合并,通过比较节点值选择较小的插入;以及递增序列合并,同时处理相同值节点的删除。展示了合并算法的步骤和关键代码实例。
最低0.47元/天 解锁文章
4418

被折叠的 条评论
为什么被折叠?



