/* * Copyright (c) leo * All rights reserved. * filename: LinkListOperate.h * summary : 单链表的合并操作 头文件 * version : 1.0 * author : leo * date : 6.11.2011 */ /*将单链表la,lb归并到lc,不破坏la、lb *la、lb按非递减排列,lc也按非递减排列 */ void MergeList_Link(const LinkList &la, const LinkList &lb,LinkList &lc); /*将单链表la,lb归并到lc,破坏la、lb *la、lb按非递减排列,lc也按非递减排列 */ void MergeList_Link(LinkList &la, LinkList &lb,LinkList &lc); /* * Copyright (c) leo * All rights reserved. * filename: LinkListOperate.cpp * summary : 单链表的合并操作 实现 * version : 1.0 * author : leo * date : 6.11.2011 */ /*将单链表la,lb归并到lc,不破坏la、lb *la、lb按非递减排列,lc也按非递减排列 */ #include <stdio.h> #include <stdlib.h> #include "LinkList.h" #include "LinkListOperate.h" void MergeList_Link(const LinkList &la, const LinkList &lb,LinkList &lc) { pLNode pa = la->next; pLNode pb = lb->next; pLNode pc = CreateList_Link(lc); pLNode p = pc; while(pa && pb) { pLNode q = (pLNode)malloc(sizeof(LNode)); p->next = q; if(pa->data <= pb->data) { q->data = pa->data; pa = pa->next; } else { q->data = pb->data; pb = pb->next; } p = p->next; }//while while(NULL != pa) //插入剩余段 { pLNode q = (pLNode)malloc(sizeof(LNode)); p->next = q; q->data = pa->data; p = p->next; pa = pa->next; } while(NULL != pb) { pLNode q = (pLNode)malloc(sizeof(LNode)); p->next = q; q->data = pb->data; p = p->next; pb = pb->next; } p->next = NULL; }//MergeList_Link /*将单链表la,lb归并到lc,破坏la、lb *la、lb按非递减排列,lc也按非递减排列 */ void MergeList_Link(LinkList &la, LinkList &lb,LinkList &lc) { pLNode pa = la->next; pLNode pb = lb->next; pLNode pc = lc = la; //用la的头结点作为lc的头结点 while(pa && pb) { if(pa->data <= pb->data) { pc->next = pa; pc = pa; pa = pa->next; } else { pc->next = pb; pc = pb; pb = pb->next; } } pc->next = pa ? pa : pb; //插入剩余段 free(lb); //释放lb头结点 } /* * Copyright (c) leo * All rights reserved. * filename: app.cpp * summary : 单链表的合并操作 应用 * version : 1.0 * author : leo * date : 6.11.2011 */ #include <iostream> #include "LinkList.h" #include "LinkListOperate.h" using namespace std; int main() { LinkList la; CreateList_Link_seq(la, 5); LinkList lb; CreateList_Link_seq(lb, 4); LinkList lc; MergeList_Link(la, lb, lc); ListTraverse(lc, printNode); cout<<endl; return 0; }