将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
思路:新链表是通过拼接给定的两个链表的所有节点组成的,这句话限制了我们不能新增一个链表来存储合并后的链表的节点,而是需要在比较的过程中不断调整两个链表的节点的指针指向最后把两个链表合并成一个链表。
在遍历时当两个链表都还没有走到最后为空的位置,需要对两个链表当前的节点对比,取值小的那个。当其中有一个链表已经遍历完了。那么剩下没有遍历完的链表剩下的节点就放在后面就可以了。
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//引入头结点,减少对第一个结点的特殊处理
ListNode pre = new ListNode(0);
ListNode cur = pre;
while(null != l1 && null != l2){
if (l1.val <= l2.val) {
cur.next = l1;
l1 = l1.next;
}
else{
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
cur.next = l1 != null ? l1:l2;
return pre.next;
}