合并两个有序链表,合并以后的链表依旧有序
来源:互联网 发布:警惕网络诈骗ppt 编辑:程序博客网 时间:2024/06/05 11:58
头文件:
typedef int DataType;typedef unsigned int size_t;#define NULL 0typedef struct Node{DataType _data;struct Node* _pNext;}Node, *PNode;
源文件:
#include "LinkList.h"#include <stdlib.h>#include <stdio.h>// 在单链表的尾部插入一个节点void PushBack(PNode* pHead, DataType data){PNode pNewNode = NULL;PNode pCurNode = NULL;pNewNode = BuyNode(data);if(pNewNode == NULL)return;if(*pHead == NULL){*pHead = pNewNode;}else{pCurNode = *pHead;while(pCurNode->_pNext){pCurNode = pCurNode->_pNext;}pCurNode->_pNext = pNewNode;}}// 构建一个新节点Node* BuyNode(DataType data){PNode node = (PNode)malloc(sizeof(Node));if(node == NULL)return NULL;node->_data = data;node->_pNext = NULL;return node;}// 正向打印单链表void PrintList(PNode pHead){if(pHead == NULL)return;while(pHead){printf("%d->",pHead->_data);pHead = pHead->_pNext;}printf("NULL\n");}// 合并两个已序单链表,合并后依然有序PNode MergeList(PNode pHead1, PNode pHead2){PNode PL1 = NULL;PNode PL2 = NULL;PNode pNewHead = NULL;PNode pTailNode = NULL;if(pHead1 == NULL)return pHead2;if(pHead2 == NULL)return pHead1;PL1 = pHead1;PL2 = pHead2;if(PL1->_data <= PL2->_data){pNewHead = PL1;pTailNode = PL1;PL1 = PL1->_pNext;}else{pNewHead = PL2;pTailNode = PL2;PL2 = PL2->_pNext;}while(PL1 && PL2){if(PL1->_data <= PL2->_data){pTailNode->_pNext = PL1;PL1 = PL1->_pNext;}else{pTailNode->_pNext = PL2;PL2 = PL2->_pNext;}pTailNode = pTailNode->_pNext;}if(PL1 != NULL)pTailNode->_pNext = PL1;if(PL2 != NULL)pTailNode->_pNext = PL2;return pNewHead;}//销毁单链表,释放空间 void DestroyList(Node* pHead) { while(pHead) { Node* temp = pHead; pHead = pHead->_pNext; free(temp); } }
测试文件:
#include "LinkList.h"void Test(){PNode pNode1 = NULL;PNode pNode2 = NULL;PNode pNewHead = NULL;PushBack(&pNode1,1);PushBack(&pNode1,3);PushBack(&pNode1,5);PushBack(&pNode1,7);PushBack(&pNode2,2);PushBack(&pNode2,4);PushBack(&pNode2,5);PushBack(&pNode2,6);PrintList(pNode1);PrintList(pNode2);pNewHead = MergeList(pNode1,pNode2);PrintList(pNewHead);DestroyList(pNewHead);}int main(){Test();return 0;}
结果:
阅读全文
0 0
- 合并两个有序链表,合并以后的链表依旧有序
- 合并两个有序链表,合并以后的链表依旧有序。
- 合并两个有序链表,合并以后的链表依旧有序
- 链表--合并两个有序链表,合并以后的链表依旧有序。
- 问题:合并两个有序链表,合并以后的链表依旧有序。
- 【链表】合并两个有序链表,合并后链表依旧有序
- 有序的合并两个有序链表
- 两个有序链表合并为有序
- 合并两个有序链表
- 合并两个有序链表
- 合并两个有序链表
- 合并两个有序链表
- 合并两个有序链表
- 合并两个有序链表
- 合并两个有序链表
- 合并两个有序链表
- 两个有序链表合并
- 合并两个有序链表
- leetcode算法题1: 两个二进制数有多少位不相同?异或、位移、与运算的主场
- java页面后台数据交互(2)
- JavaSE基础
- VMware安装VMtools,有/mnt/hgfs但没有共享文件的解决方法,已成功
- SpringMVC基础入门,创建一个HelloWorld程序
- 合并两个有序链表,合并以后的链表依旧有序
- 前端杂记
- 坑爹的Volley StringRequest 【String getBytes 理解】
- 用‘/’运算后,无论结果,返回值为float
- mybatis in集合查询
- 连接远程MySQL服务器
- 13表格实例
- [算法导论]堆排序
- (十一)并发控制