合并两个有序链表,合并以后的链表依旧有序

来源:互联网 发布:警惕网络诈骗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;}




结果: