合并两个排序的链表
来源:互联网 发布:淘宝购物数据流程图 编辑:程序博客网 时间:2024/04/30 05:09
合并两个排序的链表如:链表1:1->3->5->7; 链表2: 2->4->6->8; 合并结果为:1->2->3->4->5->6->7->8;
其合并策略类似于归并排序,这里实现了递归和非递归两种方式:
非递归合并:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2){if( pHead1 == NULL )return pHead2;else if( pHead2 == NULL )return pHead1;ListNode* pMergedHead = NULL;ListNode* p1 = pHead1;ListNode* p2 = pHead2;//找出最小的头结点if( p1->m_nValue < p2->m_nValue ){pMergedHead = p1;p1 = p1->m_pNext;}else{pMergedHead = p2;p2 = p2->m_pNext;}ListNode* pMerged = pMergedHead;while( (p1 != NULL) && (p2 != NULL) ){if( p1->m_nValue < p2->m_nValue ){pMerged->m_pNext = p1;pMerged = pMerged->m_pNext;p1 = p1->m_pNext;}else{pMerged->m_pNext = p2;pMerged = pMerged->m_pNext;p2 = p2->m_pNext;}}while( p1 != NULL ){pMerged->m_pNext = p1;pMerged = pMerged->m_pNext;p1 = p1->m_pNext;}while( p2 != NULL ){pMerged->m_pNext = p2;pMerged = pMerged->m_pNext;p2 = p2->m_pNext;}return pMergedHead;}
递归实现:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2){ if(pHead1 == NULL) return pHead2; else if(pHead2 == NULL) return pHead1; ListNode* pMergedHead = NULL; if(pHead1->m_nValue < pHead2->m_nValue) { pMergedHead = pHead1; pMergedHead->m_pNext = Merge(pHead1->m_pNext, pHead2); } else { pMergedHead = pHead2; pMergedHead->m_pNext = Merge(pHead1, pHead2->m_pNext); } return pMergedHead;}
0 0
- 两个已排序链表的合并
- 两个已排序链表的合并
- 合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序了的链表
- 合并两个排序的链表
- 23.合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序的链表
- 合并两个排序的链表
- E2034 Cannot convert 'void *' to 'HDROP__ *'
- Android中使用tcpdump抓取网络数据包
- 可以吗
- Json转换成字符串,There is a cycle in the hierarchy解决办法
- IOS开发调用系统相机和打开闪光灯
- 合并两个排序的链表
- xapian简介
- LockNote袖珍加密记事本(仅100K
- Object-C delegate 设计模式
- Improvement of AUTO sampling statistics gathering feature in Oracle 11g
- API之文本和字体函数
- 计算机网络--OSI模型
- 免费的计算机编程类中文书籍
- android 修改包名