您的位置:首页 > 其它

165合并两个排序链表

2017-07-10 20:27 288 查看

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

样例

给出 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
}


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