链表A和B的有序合并,合并过程不产生新的节点,合并后B消失

/*有序链表的合并,合并过程不产生新的节点,如A和B合并,合并和B在A中,B消失*/
#include <iostream>
using namespace std;
typedef struct Node 
{
    int element;
    Node *pNext;
}Node,*LinkList;
void InitList(LinkList& head)
{
    head=(LinkList)malloc(sizeof(Node));
    head->pNext=NULL;
}
int ListLength(LinkList head)
{
    int length=-1;
    LinkList p=head;
    while (p!=NULL)
    {
        length++;
        p=p->pNext;
    }
    return length;
    
}
void InsertList(LinkList& head,int element){
    int length=ListLength(head);
    if(length==-1)
        return;
    LinkList q=head;
    LinkList p=head->pNext;
    while (p)
    {
        if (element<p->element)
        {
            break;
        }
        q=p;
        p=p->pNext;
    }
    LinkList temp=(LinkList)malloc(sizeof(Node));
    temp->element=element;
    q->pNext=temp;
    temp->pNext=p;    
}

void PrintList(LinkList head)
{
    if (head==NULL)
    {
        return;
    }
    LinkList p=head->pNext;
    while (p)
    {
        cout<<p->element<<endl;
        p=p->pNext;
    }
}
void DestroyList(LinkList& head)
{
    if(head==NULL)
        return;
    LinkList q=head;
    LinkList p=head->pNext;
    while (p)
    {
        free(q);
        q=p;
        p=p->pNext;
    }
    free(q);
    head=NULL;
}
void InsertList(LinkList& headA,LinkList linklist)
{
    if (headA==NULL)
        return;
    LinkList q=headA;
    LinkList p=q->pNext;
    while (p)
    {
        if (linklist->element<p->element)
        {
            break;
        }
        q=p;
        p=p->pNext;
    }
    q->pNext=linklist;
    linklist->pNext=p;
}
void UnionAB(LinkList &headA,LinkList &headB)
{
    if (ListLength(headB)<1)
        return;
    LinkList q=headB;
    LinkList p=headB->pNext;
    free(headB);
    headB=NULL;
    while (p)
    {
        q=p->pNext;
        InsertList(headA,p);
        p=q;
    }
}
void main()
{
    LinkList headA;
    InitList(headA);
    InsertList(headA,1);
    InsertList(headA,8);
    InsertList(headA,5);
    InsertList(headA,10);
    PrintList(headA);

    LinkList headB;
    InitList(headB);
    InsertList(headB,15);
    InsertList(headB,2);
    InsertList(headB,7);
    InsertList(headB,12);
    PrintList(headB);
    UnionAB(headA,headB);
    PrintList(headA);
    DestroyList(headA);
    DestroyList(headB);

}

转载于:https://www.cnblogs.com/GoAhead/archive/2012/08/24/2654045.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值