题目:
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
思考:
-
因为 l1,l2 都是递增的,我们可以从头比较,交替的拿出每次较小的头结点
-
因为要存放新的顺序,可以定义一个虚拟的辅助结点
-
当其中一个链表被全部拿出时,另一个可以直接连接在新链表的后边
-
最后从辅助结点的下一个开始返回即可
题解:
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//虚拟的头结点
ListNode dum = new ListNode(0);
//记住这一步,不能直接用dum,不然返回的时候找不到头结点了
ListNode cur = dum;
while (l1 != null && l2 != null){
if (l1.val < l2.val){
cur.next = l1;
l1 = l1.next;
}else {
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
//遍历完一个链表,另一个没完就直接连在后边即可
if (l1 != null){
cur.next = l1;
}
if (l2 != null){
cur.next = l2;
}
return dum.next;
}
}