有序线性链表归并
#include<stdio.h>#include<stdlib.h>struct LNode{int data;LNode* next;};typedef LNode* LinkedList;void ListCreate(LinkedList &list,int length){LNode* p = list;p->next = NULL;for(int i = 0 ; i < length; i ++){LNode* newNode = (LNode*)malloc(sizeof(LNode));scanf("%d",&newNode->data);newNode->next = NULL;p->next = newNode;p = p->next;}}void MergeList(LinkedList &la,LinkedList &lb,LinkedList &lc){LNode* pa;LNode *pb;LNode *pc;pa = la->next;pb = lb->next;lc= pc = la;while(pa&&pb){if(pa->data < pb->data){pc->next = pa;pc = pa;pa = pa->next;}else if(pa->data == pb->data){pc->next = pa;pc = pa;pa = pa->next;LNode* tmp = pb;pb = pb->next;free(tmp);}else{pc->next = pb;pc = pb;pb = pb->next;}}pc->next = pa ? pa : pb;free(lb);}void ListPrint(LinkedList &list){LNode* p = list->next;while(p){printf("%d ",p->data);p = p->next;}printf("\n");}int main(){LinkedList linklistA = (LinkedList)malloc(sizeof(LNode));LinkedList linklistB = (LinkedList)malloc(sizeof(LNode));LinkedList linklistC;int lenA,lenB;printf("Input LinkedListA's length:\n");scanf("%d",&lenA);ListCreate(linklistA,lenA);printf("Input LinkedListB's length:\n");scanf("%d",&lenB);ListCreate(linklistB,lenB);MergeList(linklistA,linklistB,linklistC);ListPrint(linklistC);return 0;}
?