165合并两个排序链表

来源:互联网 发布:单片机花贲浇花 编辑:程序博客网 时间:2024/05/19 20:58

将两个排序链表合并为一个新的排序链表

样例
给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。

思路:

跟我们合并两个数组一样,链表1的头结点 和链表2的头节点比较,如果链表1头节点的值大于链表2头接点的值,
那么链表2的头结点为合并链表的头结点,那么链表1的头节点继续和链表2的第二个节点(剩余链表2的头结点)
作比较,但一个链表遍历完之后,如果另外一个链表还没有遍历完,因为链表本来就是排序的,所以让合并链表的
尾巴节点指向未遍历完链表的头结点就可以

举个例子:

链表1: 1,3,5,23,34;
链表2: 2,4,6,8,10;
当遍历之后 链表3:1,2,3,4,8,10 此时链表2已经遍历完,while循环退出,但是剩余链表1还有 23,34
此时 让链表3的尾巴节点10 链接 剩余链表的头节点 23 就可以了
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param ListNode l1 is the head of the linked list
* @param ListNode l2 is the head of the linked list
* @return: ListNode head of linked list
*/
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
if(l1==NULL)
{
return l2;
}
if(l2==NULL)
{
return l1;
}
ListNode*mh=new ListNode(0);
ListNode*mcurr=mh;
while(l1!=NULL&&l2!=NULL)
{
if(l1->valval)
{
mcurr->next=l1;
l1=l1->next;
}
else
{
mcurr->next=l2;
l2=l2->next;

        }            mcurr=mcurr->next;        if(l1==NULL)        {            mcurr->next=l2;        }        if(l2==NULL)        {            mcurr->next=l1;        }    }    return mh->next;// write your code here}

};