求出递增链表La、Lb的差集Lc,并同样以递增的方式存储

原题:已知两个带头结点的单链表La和Lb分别表示两个集合,元素值递增有序,设计算法求出La、Lb的差集Lc,并同样以递增的方式存储。(La和Lb的差集:即在La中而不在Lb中的元素的集合)

分析:求差集由函数Difference()实现,其算法思想:由于单链表La和Lb是递增有序的,可设置两个指针分别指向两个链表的第一个元素,当La的数据域值小于Lb的数据时,将其复制到Lc;如果数据域值相同,将指针pa和pb前进,否则数据域值小的指针向前进,直到两个指针中有一个为空为止;如果pb指针为空,pa指针非空,则将La中其余元素依次复制到Lc中即可。

#include
#include
#include
#include

typedef struct LNode
{
	int data;
	struct LNode *next;
}LNode,*LinkList;

int static flag=0;//定义全局变量flag

int InitList(LinkList &L)
{
	LinkList p,q,pre;
	L=(LinkList)malloc(sizeof(LNode));//生成头结点
	L->data=-1;L->next=NULL;//头结点数据域值为-1
	if(flag == 0)//flag为0时才种下随机种子
	{
		srand((unsigned)time(NULL));flag=1;
	}
	else
	{
		flag=0;
	}
	for(int k=0;k<20;k++)//生成结点并插入链表
	{
		p=(LinkList)malloc(sizeof(LNode));
		p->data=rand()%40+1;p->next=NULL;
		if(L->next == NULL)//如果链表为空,则直接将结点插入作为第一个数据结点
		{
			L->next=p;p->next=NULL;
		}
		else
		{//如果链表不为空,则按数据域值从小

你可能感兴趣的:(剑指offer-算法与数据结构,递增,单链表,差集,算法)