合并两链表
来源:互联网 发布:淘宝加入购物车看不到 编辑:程序博客网 时间:2024/03/29 22:38
合并两链表,在对两有序链表应该做较详尽的分析
1.一链表为空则合并结果为另一链表。
2.合并过程中的大小比较。(为减少开辟节点所占空间,可以比较两链表第一个节点元素大小,并将头节点直接赋给新节点)
3.两链表长度不同时的处理。
List.h
#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int DataType;typedef struct LinkNode{DataType _data;struct LinkNode *_next;}LinkNode,*pLinkNode;typedef struct LinkList{LinkNode *pHead;}*pLinkList; void Init_List(pLinkNode plist);void Push_List(pLinkNode plist,DataType data);void print_List(pLinkNode plist);void free_List(pLinkNode plist);pLinkNode Merge_List(pLinkNode plist1, pLinkNode plist2);
Merge.h
#include"List.h"void Init_List(pLinkNode plist){ assert(plist);plist->_next = NULL;}pLinkNode creatNode(DataType data){pLinkNode newNode = (pLinkNode)malloc(sizeof(LinkNode));if (newNode == NULL){printf("out of memory");exit(EXIT_FAILURE);}newNode->_data = data;newNode->_next = NULL;return newNode;}void Push_List(pLinkNode plist, DataType data){pLinkNode newNode=creatNode(data);if (NULL == plist->_next) //空链表plist->_next = newNode;elsewhile (plist->_next ){plist = plist->_next;}plist->_next = newNode;}void free_List(pLinkNode plist){assert(plist);if (NULL == plist->_next) //空链表return;else if (NULL == plist->_next->_next) //只有一个节点{free(plist->_next);}elsewhile (plist){free(plist);plist = plist->_next;}}pLinkNode Merge_List(pLinkNode plist1, pLinkNode plist2){assert(plist1);assert(plist2);pLinkNode plist3 = NULL;pLinkNode cur = NULL;if (NULL == plist1->_next)return plist2;if (NULL == plist2->_next)return plist1;if (plist1->_next->_data < plist2->_next->_data)plist3 = plist1;elseplist3 = plist2; plist1 = plist1->_next;plist2 = plist2->_next;cur = plist3;while (plist1 && plist2) //两链表进行比较{if (plist1->_data <= plist2->_data){cur->_next = plist1;plist1 = plist1->_next;cur = cur->_next;//plist3 = plist3->_next;}else if (plist1->_data > plist2->_data){cur->_next = plist2;plist2 = plist2->_next;cur = cur->_next;//plist3 = plist3->_next;}//某一链表已走完//if (NULL!=plist1&&NULL!=plist2)if (plist1 == NULL){while (plist2){cur->_next= plist2;plist2 = plist2->_next;cur = cur->_next;//plist3 = plist3->_next;}}if (plist2 == NULL){while (plist1){ cur ->_next= plist1;plist1 = plist1->_next;cur = cur->_next;//plist3 = plist3->_next;}}}return plist3;}void print_List(pLinkNode plist){pLinkNode cur = plist;while (cur){printf("%d->", cur->_data);cur = cur->_next;}printf("NULL\n");}
test.c
#include"Merge.h"void test(){LinkNode p1;LinkNode p2;pLinkNode p3 = NULL;//LinkNode p1, p2;Init_List(&p1);Init_List(&p2);Push_List(&p1, 1);Push_List(&p1, 3);Push_List(&p1, 5);Push_List(&p1, 7);print_List(&p1);Push_List(&p2, 2);Push_List(&p2, 4);Push_List(&p2, 6);Push_List(&p2, 8);print_List(&p2); p3=Merge_List(&p1,&p2);print_List(p3);}int main(){test();getchar();return 0;}
阅读全文
0 0
- 合并两链表
- 合并两链表
- 合并
- 合并
- 合并
- 【合并正方形】石子合并
- 启发式合并&线段树合并&treap合并
- 合并两链表:LinkList:Merge Two LinkList using the general method
- 递归合并两链表:LinkList:Merge Two Lists using recursive method
- 合并字段
- 合并复制
- 合并 DLL
- 单链表合并
- image 合并
- 数据表合并
- 合并DataTable
- 合并报表
- 文件合并
- JQuery
- 编写Shell脚本的最佳实践
- 【JAVA300】16-20 笔记
- hdu1001 Sum Problem(C语言)
- help VS man VS info
- 合并两链表
- 数据类型转换之 QString与binary
- 不放过任何一个获客机会 自助餐如何做好小程序?
- HDU 4311 Meeting point-1 (思维)
- 读取和保存txt文件
- SDWebImage如何避免复用
- linux grep命令使用详解
- 思维体操: HDU1049Climbing Worm
- mongdb之集合基本操作