QUESTION:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
EXPLANATION:
采用双指针的方式,哪个数值比较小,那么就将该值添加到结果linkedlist的后面。
逻辑:
1.判断两个链表当前的头数值大小
2.将小的结果放在结果链表后面,同时小链表头指针往后移一格
3.重复1-2,直到两个链表都为null
可以优化的地方,如果其中一个链表已经都整理完了,那么可以直接将另外一个链表贴在后面。
SOLUTION:
/**
* 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(0);
ListNode tmp = head;
while (l1!=null || l2!=null){
int l1val = l1==null?Integer.MAX_VALUE:l1.val;
int l2val = l2==null?Integer.MAX_VALUE:l2.val;
ListNode node;
if(l1val>l2val){
node = new ListNode(l2.val);
l2 = l2.next;
}else{
node = new ListNode(l1.val);
l1 = l1.next;
}
head.next = node;
head = head.next;
}
return tmp.next;
}
}