/*有序链表的合并,合并过程不产生新的节点,如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); }