C语言:非减链表的合并
2015-08-01 20:22
495 查看
/* a,b是两个非减单链表,把它们合并成一个新的链表,元素也是非减的 */ # include <stdio.h> # include <malloc.h> typedef struct node { int data; struct node * pNext; }NODE, *PNODE; PNODE creat_list(); //创建链表 void travese(PNODE pHead); //遍历链表 PNODE union_list(PNODE pA, PNODE pB); //有顺序的合并两个链表 int main(void) { //创建链表A PNODE pA = creat_list(); travese(pA); //创建链表B PNODE pB = creat_list(); travese(pB); //生成合并链表C PNODE pC = union_list(pA, pB); travese(pC); return 0; } //创建链表 PNODE creat_list() { int i, val; int len; PNODE pHead = (PNODE)malloc(sizeof(NODE)); //创建头结点 pHead->pNext = NULL; PNODE pNew; PNODE pTail = pHead; //指向尾节点 printf("链表的长度为 len = "); scanf("%d", &len); for(i = 0; i < len; i++) { printf("链表的第%d个元素:", i+1); scanf("%d", &val); pNew = (PNODE)malloc(sizeof(NODE)); pNew->data = val; pNew->pNext = NULL; pTail->pNext = pNew; pTail = pNew; } return pHead; } //遍历链表 void travese(PNODE pHead) { PNODE p = pHead->pNext; //p指向头结点 while(p) { printf("%d ", p->data); p = p->pNext; } printf("\n"); } //合并两个非减 单链表,至一个新的非减 单链表 PNODE union_list(PNODE pA, PNODE pB) { PNODE pC = (PNODE)malloc(sizeof(NODE)); //合并后链表的头结点 pC->pNext = NULL; PNODE pTail = pC; //指向链表C的尾节点 PNODE pa = pA->pNext; PNODE pb = pB->pNext; while(pa && pb) { if(pa->data <= pb->data) //当前A中节点的值 大于 B中节点的值 { pTail->pNext = pa; //指向A中当前节点 pTail = pa; pa = pa->pNext; } else { pTail->pNext = pb; pTail = pb; pb = pb->pNext; } } if(pa) //若链表A中有剩余节点 { pTail->pNext = pa; } if(pb) //若链表B中有剩余节点 { pTail->pNext = pb; } return pC; }
相关文章推荐
- 归并排序C语言实现
- 什么情况下,类的析构函数声明为虚函数
- 堆排序(C语言实现)
- C++ 计蒜客基础算法入门数塔问题
- C++课程设计
- 插入排序C语言实现
- 初学C语言
- 异常处理中的问题
- C语言关键字详解
- 显示调用c++动态链接库
- 一起talk C栗子吧(第二十七回:C语言实例--插入排序)
- int b[m][n]和int **b——关于数组名和指针的关系这件“小事”
- 4000 [2015.8.1]C++学习总结
- C++之sstream格式流(常用于格式转换)
- C语言:用链表实现一元多项式的加法
- c语言位操作
- c++动态数组
- C语言编程入门——程序练习(下)
- C++基础学习(06AM)
- C语言深度解剖——读书笔记-3、关键字(const、 volatile、extern、struct、union、enum、typedef)