掌握了具体算法后,不论是用Java和C感觉都不是太难。
#include "stdio.h"
#include "malloc.h"
//节点的声明
typedef struct Node{
int data;
struct Node * next;
}node,*ptrNode;
//采用尾插法建立单链表
ptrNode
Create_List(int n){//参数n为链表的节点数
int i =0;
ptrNode p,head;
head = (ptrNode)malloc(sizeof(node));
head->next = NULL;
for(i=n;i>0;i--){
p =
(ptrNode)malloc(sizeof(node));
printf("input the
value:");
scanf("%d",&p->data);//注意此处的&
p->next =
head->next;//使新节点和后一节点连接起来
head->next =
p;//使新的节点和头节点连接起来,保证head的指针域存储的是下一节点的地址
}
return head;
}
void Merge_List(ptrNode la,ptrNode
lb,ptrNode lc){
ptrNode pa,pb,pc;
pa = la->next;
pb = lb->next;
pc = lc;
while(pa&&pb){
if((pa->data)<=(pb->data)){
pc->next =
pa;
pc =
pa;//使pc指向当前lc的最后一个节点
pa =
pa->next;
}
else{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa?pa:pb;
free(lb);
}
void Print_List(ptrNode
head){
ptrNode p;
p = head->next;
while(p){
printf("[%d]
",p->data);//打印当前数据
p=p->next;//指针后移
}
}
void main(){
ptrNode la,lb,lc;
la = Create_List(5);
lb = Create_List(4);
lc = la;//以链表la的头节点为新链表的头节点
Merge_List(la,lb,lc);
Print_List(lc);
getch();
}
加载中,请稍候......