定义单链表
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
A\B皆为有序链表,合并排序到C中 头插法
void merge(LNode *A,LNode *B,LNode *&C)
{
LNode *p=A->next;
LNode *q=B->next;
LNode *r;
C=A;//把A复制给C
C->next=NULL;
r=C;
free(B);//释放B的头结点
while(p!=NULL&&q!=NULL)
{
if(p->data<q->data)
{
r->next=p;
p=p->next;
r=r->next;
}
else{
r->next=q;
q=q->next;
r=r->next;
}
}
if(q->next==NULL)//if(p!=NULL)
{
r->next=p
}
if(p->next==NULL)if(q!=NULL)
{
r->next=q;
}
}
A\B皆为有序链表,合并排序到C中 尾插法
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
void merge(LNode *A,LNode *B,LNode *&C)
{
LNode *p=A->next;
LNode *q=B->next;
LNode *r;
C=A;
C->next=NULL;
free(B);//释放B的头结点
while(p!=NULL&&q!=NULL)
{
if(p->data<=q->data)
{
r=p;
p=p->next;
r->next=C->next;
c->next=r;
}
else{
r=q;
q=q->next;
r->next=C->next;
c->next=r;
}
}
if(p!=NULL)
{
r=p;
p=p->next;
r->next=C->next;
C->next=r
}
if(q!=NULL)
{
r=q;
q=q->next;
r->next=C->next;
C-next=r;
}
}
查找(找到删除结点并返回1,没有返回0)与删除
int finddelmerge(LNode *&A,int x)
{
LNode *p,*q;
p=A;
while(p->next!=NULL)
{
if(p->next->data==x)
break;//找到的情况
else
p=p->next;//没有找到就往后移
}
if(p->next==NULL)
{
return 0;
}
else
{
q=p->next;
p->next=q->next;
free(q);//删除q结点
return 1;
}
}