# 合并两个排好序的链表

//合并两个有序的链表，使用递归和非递归的思想
#include<iostream>
using namespace std;
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
ListNode* CreateListNode(int value)
{
ListNode* pNode = new ListNode();
pNode->m_nValue = value;
pNode->m_pNext = NULL;

return pNode;
}

void ConnectListNodes(ListNode* pCurrent, ListNode* pNext)
{
if(pCurrent == NULL)
return;

pCurrent->m_pNext = pNext;
}
{
return;
{
}
}

//递归的思想
ListNode* MergeList(ListNode* list1,ListNode* list2)
{
if(list1==NULL)
return list2;
else if(list2==NULL)
return list1;
if(list1==NULL&&list2==NULL)
return NULL;

if(list1->m_nValue<list2->m_nValue )
{
}
else
{
}
}
//非递归的做法
{
return NULL;

ListNode *p1 = NULL;
ListNode *p2 = NULL;
{
}
else
{

}
while ( p1 != NULL && p2 != NULL)
{
if ( p1->m_nValue <= p2->m_nValue )
{
pcurrent->m_pNext = p1 ;
pcurrent = p1 ;
p1 = p1->m_pNext ;
}
else
{
pcurrent->m_pNext = p2 ;
pcurrent = p2 ;
p2 = p2->m_pNext ;
}
}
if ( p1 != NULL )
pcurrent->m_pNext = p1 ;
if ( p2 != NULL )
pcurrent->m_pNext = p2 ;

}

void main()
{
ListNode* pNode3 = CreateListNode(3);
ListNode* pNode5 = CreateListNode(5);
ListNode* pNode8 = CreateListNode(8);
ListNode* pNode11 = CreateListNode(11);

ConnectListNodes(pNode3, pNode5);
ConnectListNodes(pNode5, pNode8);
ConnectListNodes(pNode8, pNode11);

ListNode* pNode2 = CreateListNode(2);
ListNode* pNode6 = CreateListNode(6);
ListNode* pNode8a = CreateListNode(8);
ListNode* pNode9 = CreateListNode(9);
ListNode* pNode11a = CreateListNode(11);
ListNode* pNode15 = CreateListNode(15);
ListNode* pNode20 = CreateListNode(20);

ConnectListNodes(pNode2, pNode6);
ConnectListNodes(pNode6, pNode8a);
ConnectListNodes(pNode8a, pNode9);
ConnectListNodes(pNode9, pNode11a);
ConnectListNodes(pNode11a, pNode15);
ConnectListNodes(pNode15, pNode20);

print(pNode3);
cout<<endl;
print(pNode2);
cout<<endl;

//递归的思想做的合并
//	ListNode *pNode=MergeList(pNode3,pNode2);
//	print(pNode);
//	cout<<endl;

//非递归的思想做的合并
ListNode *pNodes=Merge(pNode3,pNode2);
print(pNodes);
cout<<endl;
}



• 本文已收录于以下专栏：

## 合并两个排好序的单向链表

Node* mergeLists(Node *a, Node *b) { if (a == NULL) { return b; } if (b == NULL) { return a...
• brucehb
• 2013年10月04日 10:36
• 537

## 合并两个排好序的链表

typedef struct Nodetag{TYPE val; struct Nodetag * next;} Node; typedef Node* pNode; Node* combine(N...

## 【LeetCode-面试算法经典-Java实现】【023-Merge k Sorted Lists（合并k个排好的的单链表）】

【023-Merge k Sorted Lists（合并k个排好的的单链表）】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题　　Merge k sorted linked l...

## 求两个排好序的数组的中位数 - 二分法

There are two sorted arrays A and B of size m and nrespectively. Find the median of the two sorted a...

## Find the median of two sorted arrays(找到两个排好序的数组的中位数）

• wuh2333
• 2016年09月19日 14:28
• 300

## 算法导论9.3-8-设X[1..n]和Y[1..n]为两个数组，每个都包含n个已排好序的数，给出一个求数组X和数组Y中所有2n个元素的中位数

#include #include #include #include using namespace boost::timer; using namespace std; int part...

举报原因： 您举报文章：合并两个排好序的链表 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)