1.题目
将两个排序链表合并为一个新的排序链表
给出 1->3->8->11->15->null
,2->null
, 返回1->2->3->8->11->15->null
。
2.思路
新建一个链表,对给定的两个链表从头遍历并比较大小,每次将较小(<=)的一个值插入到新链表中;因为给定的两个链表是已排好序的,所以如果两个链表不一样长,直接将长链表后半部分插入新链表中;当一个链表为空时,相当于直接把另一个非空的插入到新链表。返回新链表就是合并后排好序的链表了~~~
3.代码
/**
* 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) {
// write your code here
ListNode *dummy=new ListNode(0);
ListNode *p=dummy;
while(l1!=NULL&&l2!=NULL)
{
if(l1->val<=l2->val)
{ p->next=l1;
l1=l1->next;
p=p->next;
}
else
{ p->next=l2;
l2=l2->next;
p=p->next;
}
}
if(l1!=NULL)
{ p->next=l1;}
else
{ p->next=l2; }
return dummy->next;
}
};
4.感想
我是做了链表求和又做的这个题,如果不清楚的话,就会把两个题的插入到新链表的操作混了。但是链表求和因为要考虑进位最后对长一点的链表还要用while循环,但是在合并链表中可以不用循环直接把长的一段插入到新建链表中就好了~这个题挺简单的,写出来调了一下就过了,开心!