这个算法的思路是两个指针分别指向两个链表头,然后才头到尾遍历,复杂度是O(min(Length(a),Length(b)),下面给出实现代码,是用纯C写的链表实现,注意代码中直接采用尾插法最后一个数据会超时,因为链表尾插的时间复杂度是O(N),解决的办法是创建一个尾节点
#include <stdio.h>
#include <stdlib.h>
#define ERROR NULL
typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode {
ElementType Data;
PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;
List MakeEmpty();
Position Find(List L, ElementType X);
bool Insert(List L, ElementType X, Position P);
bool Delete(List L, Position P);
void InsertTail(List L, ElementType X);
int main()
{
List L1 = MakeEmpty();
List L2 = MakeEmpty();
List L3 = MakeEmpty();
int temp;
while (1)
{
scanf_s("%d", &temp);
if (temp == -1)
break;
InsertTail(L1, temp);
}
while (1)
{
scanf_s("%d", &temp);
if (temp == -1)
break;
InsertTail(L2, temp);
}
PtrToLNode