码迷,mamicode.com
首页 > 其他好文 > 详细

合并有序链表

时间:2015-08-20 01:02:06      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

  1. using namespace std;  
  2.   
  3.   
  4. struct ListNode  
  5. {  
  6.     int         m_Data;  
  7.     ListNode*   m_pNext;  
  8.     ListNode(int value,ListNode* next = NULL):m_Data(value),m_pNext(next){}  
  9. };  
  10.   
  11. /* 
  12. 两个链表  比如链表1: 1->3->5->7->9 
  13.             链表2:  2->4->6->8->10 
  14.  
  15.             跟我们合并两个数组一样,链表1的头结点  和链表2的头节点比较,如果链表1头节点的值大于链表2头接点的值, 
  16.             那么链表2的头结点为合并链表的头结点,那么链表1的头节点继续和链表2的第二个节点(剩余链表2的头结点) 
  17.             作比较,但一个链表遍历完之后,如果另外一个链表还没有遍历完,因为链表本来就是排序的,所以让合并链表的 
  18.             尾巴节点指向未遍历完链表的头结点就可以 
  19.  
  20.             举个例子: 
  21.  
  22.             链表1: 1,3,5,23,34; 
  23.             链表2: 2,4,6,8,10; 
  24.             当遍历之后 链表3:1,2,3,4,8,10  此时链表2已经遍历完,while循环退出,但是剩余链表1还有 23,34 
  25.             此时 让链表3的尾巴节点10 链接 剩余链表的头节点 23  就可以了 
  26. */  
  27.   
  28. ListNode* MergeList2(ListNode* head1,ListNode* head2)  
  29. {  
  30.     if (head1 == NULL)  
  31.     {  
  32.         return head2;  
  33.     }  
  34.     else if(head2 == NULL)  
  35.     {  
  36.         return head1;  
  37.     }  
  38.   
  39.     ListNode* MergeHead = NULL;  
  40.     if (head1->m_Data < head2->m_Data)  
  41.     {  
  42.         MergeHead = head1;  
  43.         head1 = head1->m_pNext;  
  44.     }  
  45.     else  
  46.     {  
  47.         MergeHead = head2;  
  48.         head2 = head2->m_pNext;  
  49.     }  
  50.     ListNode* tmpNode = MergeHead;  
  51.     while (head1&&head2)  
  52.     {  
  53.         if (head1->m_Data < head2->m_Data)  
  54.         {  
  55.             MergeHead->m_pNext = head1;  
  56.             head1 = head1->m_pNext;  
  57.         }  
  58.         else  
  59.         {  
  60.             MergeHead->m_pNext = head2;  
  61.             head2 = head2->m_pNext;  
  62.         }  
  63.         MergeHead = MergeHead->m_pNext;  
  64.     }  
  65.     if (head1)  
  66.     {  
  67.         MergeHead->m_pNext = head1;  
  68.     }  
  69.     if (head2)  
  70.     {  
  71.         MergeHead->m_pNext = head2;  
  72.     }  
  73.   
  74.     return tmpNode;  
  75.   
  76. }  
  77. int _tmain(int argc, _TCHAR* argv[])  
  78. {  
  79.     ListNode* pHead1 = new ListNode(1);  
  80.     ListNode* pCur = pHead1;  
  81.     for (int i = 3; i < 10; i+=2)  
  82.     {  
  83.         ListNode* tmpNode = new ListNode(i);  
  84.         pCur->m_pNext = tmpNode;  
  85.         pCur = tmpNode;  
  86.     }  
  87.   
  88.     ListNode* pHead2 = new ListNode(2);  
  89.     pCur = pHead2;  
  90.     for (int j = 4; j < 10; j+=2)  
  91.     {  
  92.         ListNode* tmpNode = new ListNode(j);  
  93.         pCur->m_pNext = tmpNode;  
  94.         pCur = tmpNode;  
  95.     }  
  96.   
  97.     ListNode* head = MergeList2(pHead1,pHead2);  
  98.     while (head)  
  99.     {  
  100.         cout<<head->m_Data<<" ";  
  101.         head=head->m_pNext;  
  102.     }  
  103.   
  104.   
  105.     getchar();  
  106.     return 0;  
  107. }</span>  

合并有序链表

标签:

原文地址:http://www.cnblogs.com/wdd-123/p/4743863.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!