将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
思路:
两个链表的节点比较大小,谁小复制谁的值,然后往后走。其中一个走完以后,另一个走剩下的依次赋值即可。
java代码如下:
/**
* 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 node = new ListNode(0);
ListNode p = l1, q = l2, temp = node;
while(p != null && q != null){
ListNode ln = new ListNode(0);
if(p.val > q.val){
ln.val = q.val;
q = q.next;
}
else{
ln.val = p.val;
p = p.next;
}
temp.next = ln;
temp = temp.next;
}
while(p != null){
ListNode ln = new ListNode(p.val);
p = p.next;
temp.next = ln;
temp = temp.next;
}
while(q != null){
ListNode ln = new ListNode(q.val);
q = q.next;
temp.next = ln;
temp = temp.next;
}
return node.next;
}
}