链表经典面试题二

题型七:合并两个链表,合并后的链表依旧有序

分析:最简单的思路就是遍历两个链表,每次取出其中一个链表的节点,两个链表取出来的节点相比较,取较小值插入到新链表中。就这样一直比较,直到有一个链表为空就结束循环。但是要注意的是,当两个链表第一次比较时,将较小数据作为新的链表的头节点 ,确定之后,再创建一个节点tail指向新链表的最后一个节点,每次取出的数据尾插在tail后面,当遇到其中有一个链表为空的情况下,就像链表的剩余节点直接链接到tail后面。

ListNode* MergeList(ListNode* List1, ListNode* List2)//归并两个有序链表,归并后依旧有序
{
     ListNode* NewList=NULL;
     ListNode* tail = NULL;
     //如果链表一为空,返回链表2
     if (List1 == NULL)
     {
          return List2;
     }
     //如果链表二为空,返回链表一
     if (List2 == NULL)
     {
          return List1;
     }
     //找头
     if (List1->data < List2->data)
     {
          NewList = List1;
          List1 = List1->pNext;
     }
     else
     {
          NewList = List2;
          List2 = List2->pNext;
     }
     tail = NewList;
     

你可能感兴趣的:(计算机科学与技术)