• 合并有序链表


    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>  
  • 相关阅读:
    TURN协议(RFC5766详解)
    css布局相关:涉及到常见页面样式难点
    关于echart的x轴固定为0-24小时显示一天内的数据
    用于实现tab页签切换页面的angular路由复用策略
    Promise相关学习
    js原型链、继承、this指向等老生常谈却依然不熟的知识点——记录解析
    js中有遍历作用相关的方法详解总结
    rgb格式颜色与#000000格式颜色的转换
    input搜索框的搜索功能
    Fastapi学习总结(上)
  • 原文地址:https://www.cnblogs.com/wdd-123/p/4743863.html
Copyright © 2020-2023  润新知