将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解题思路:
1 先根据两个链表的第一个节点判断并建立result的头结点。
2 对两个链表同时遍历,判断两个链表的当前元素的大小,将小的接在result后面,直到两个链表中的一个或两个到了链表尾
3 判断是否是还有一个链表中还有元素,若有,直接接在result后面。
// public class ListNode {
// int val;
// ListNode next;
// ListNode(int x) { val = x; }
// }
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode p = l1;
ListNode q = l2;
ListNode result;
ListNode r;
if (l1 == null && l2 == null)
return null;
if (l1 == null)
return l2;
if (l2 == null)
return l1;
if (p.val <= q.val){
result = new ListNode(p.val);
r = result;
p = p.next;
}
else{
result = new ListNode(q.val);
r = result;
q = q.next;
}
while (p != null && q != null){
while (p != null && q != null && p.val <= q.val){
r.next = p;
r = r.next;
p = p.next;
}
while (p != null && q != null && q.val <= p.val){
r.next = q;
r = r.next;
q = q.next;
}
}
if (q == null)
r.next = p;
else r.next = q;
return result;
}
}