一、题目描述
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
题目来源LeetCode合并两个有序链表
二、解题思路
由于两个链表原先就是有序的,遍历链表的过程中比较两个链表中元素的大小,小的元素先插入新的链表。当两个链表遍历完毕之后,新的链表就是有序的。代码如下。
/**
* 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 head=new ListNode(-1);
ListNode cur=head;
ListNode p1=l1,p2=l2;
while (p1!=null && p2!=null){
while(p2!=null && p1!=null &&p1.val<p2.val){
ListNode p1Next=p1.next;
p1.next=null;
cur.next=p1;
cur=p1;
p1=p1Next;
}
while(p2!=null && p1!=null && p1.val>=p2.val){
ListNode p2Next=p2.next;
p2.next=null;
cur.next=p2;
cur=p2;
p2=p2Next;
}
}
ListNode l=p1==null?p2:p1;
cur.next=l;
return head.next;
}
}