1.问题描述
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
2.问题分析
我们打个比方
我们先定义两个头指针分别指向A,B链表的第一个结点(p1,p2),然后再定义第三个头指针指向我们连接后的第一个结点(p3),然后进行A,B链表的第一个结点的比较,小的用我们的第三个头指针连接起来,上图是A小,那么头指针(p3)连接的第一个结点是1,然后A的头指针的指向向后移动一位,指向第二个结点3,然后再与B比较,谁比较小再用p3连接起来,最终把两个链表合成一个链表
3.代码实现
3.1C++代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode *p1=l1;
ListNode *p2=l2;
ListNode *p3;
ListNode *head=p3;
while(p1&&p2)
{
if(p1->val<=p2->val)
{
p3->next=p1;
p1=p1->next;
p3=p3->next;
}
else{
p3->next=p2;
p2=p2->next;
p3=p3->next;
}
}
p3->next=p1?p1:p2;
return head->next;
}
};
3.1Java代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode p1=l1;
ListNode p2=l2;
ListNode p3=new ListNode(0);
ListNode head=p3;
while(p1!=null&&p2!=null)
{
if(p1.val<=p2.val)
{
p3.next=p1;
p1=p1.next;
p3=p3.next;
}
else{
p3.next=p2;
p2=p2.next;
p3=p3.next;
}
}
p3.next=(p1!=null)?p1:p2;
return head.next;
}
}