您的位置:首页 > 其它

合并两个排序的链表(非递归)

2015-03-23 10:02 375 查看
输入两个递增排序的链表,合并这两个链表并使新链表中的结构任然递增!

1 struct ListNode
2 {
3     int m_nValue;
4     ListNode* m_pNext;
5 };


1 ListNode* CreatList(int* data , unsigned int length)
2 {
3     if (!data || length<=0)
4     {
5         return NULL;
6     }
7
8     ListNode* pHeadNode = new ListNode();
9     pHeadNode->m_nValue = data[0] ;
10     pHeadNode->m_pNext = NULL ;
11     ListNode* pAhead = pHeadNode ;
12     for (int i=1 ; i!= length ;i++)
13     {
14         ListNode* pNode = new ListNode();
15         pNode->m_nValue = data[i];
16         pNode->m_pNext = NULL;
17         pAhead->m_pNext = pNode ;
18         pAhead = pNode ;
19
20     }
21     pAhead = NULL ;
22     return pHeadNode ;
23 }


1 void PrintList(ListNode* pHead )
2 {
3     if (!pHead)
4     {
5         return;
6     }
7     else
8     {
9         while (pHead->m_pNext != NULL)
10         {
11             cout<<pHead->m_nValue<<" ";
12             pHead = pHead->m_pNext ;
13         }
14         cout<<pHead->m_nValue<<endl;
15     }
16
17 }


///////////////////合并两个排序的链表////////////////////
ListNode* Merge(ListNode* pHead1 ,ListNode* pHead2)
{
if (!pHead1) return pHead2;
if (!pHead2) return pHead1;
if (!pHead1 && !pHead2) return NULL ;

ListNode* pHead = NULL ;
ListNode* pNext = NULL;
ListNode* pNode = NULL ;
if (pHead1->m_nValue <= pHead2->m_nValue)
{
pHead = pHead1 ;
pNode = pHead2 ;
}else
{
pHead = pHead2 ;
pNode = pHead1 ;
}
ListNode* pMergedHead = pHead ;
while(pNode != NULL)
{
while((pHead->m_pNext !=NULL)  &&  (pHead->m_pNext->m_nValue) <= (pNode->m_nValue) )
{
pHead = pHead->m_pNext ;
}
pNext = pHead->m_pNext ;
pHead->m_pNext = pNode ;
pHead = pNode ;
pNode = pNext ;

}

return pMergedHead ;

}


1 int main()
2 {
3     int iv1[] = {1,3,7,7,9};
4     int iv2[] = {0,2,4,6,10};
5
6     ListNode* pHead1 = CreatList(iv1,5);
7     ListNode* pHead2 = CreatList(iv2,5);
8     PrintList(pHead1);
9     PrintList(pHead2);
10<
4000
/span>
11     ListNode* pMergedHead = Merge(pHead1,pHead2);
12     cout<<"合并后:";
13     PrintList(pMergedHead);
14
15     delete pMergedHead ;
16
17     system("pause");
18     return 0;
19 }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: