问题描述:将两个排序链表合并为一个新的排序链表
样例:
给出 1->3->8->11->15->null
,2->null
, 返回 1->2->3->8->11->15->null
。
实现思路:首先建一个新链表,新链表的头结点就是L1或L2中较小的那一个,若L1中的头结点是小于L2的,那么在比较完头结点之后,再将L1中的下一个节点与L2中的头结点比较,同样是谁小谁进入新链表,然后在比较,直到两个链表比较完。
实现代码:
* 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&&l2==NULL)
{return NULL;}
if(l1==NULL)
{ return l2;}
if(l2==NULL)
{return l1;}
ListNode *first=new ListNode(0);
ListNode *p=first;
while(l1!=NULL&&l2!=NULL){
if(l1->val<=l2->val)
{first->next=l1;
first=l1;
l1=l1->next;}
else
{first->next=l2;
first=l2;
l2=l2->next;
}
}
if(l1!=NULL)
{first->next=l1;}
if(l2!=NULL)
{first->next=l2;}
return p->next;
}// write your code here
};
做题感想:当两个链表都不是空的时候,先要考虑判断好二者的大小,然后要考虑好指针,注意新链表中指针后移,并且当前链表中指针要后移。