原题:已知两个带头结点的单链表La和Lb分别表示两个集合,元素值递增有序,设计算法求出La、Lb的差集Lc,并同样以递增的方式存储。(La和Lb的差集:即在La中而不在Lb中的元素的集合)
分析:求差集由函数Difference()实现,其算法思想:由于单链表La和Lb是递增有序的,可设置两个指针分别指向两个链表的第一个元素,当La的数据域值小于Lb的数据时,将其复制到Lc;如果数据域值相同,将指针pa和pb前进,否则数据域值小的指针向前进,直到两个指针中有一个为空为止;如果pb指针为空,pa指针非空,则将La中其余元素依次复制到Lc中即可。
#include<stdio.h>
#include<malloc.h>
#include<time.h>
#include<stdlib.h>
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