解题思路
使用新建链表的方式,这样能减少判断条件
定义了两个节点指针
定义了一个虚拟的头节点,这样不用判断到底是哪一个节点开始 直接return dummy.next;
代码
/**
* 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 dummy = new ListNode(0);
ListNode p = dummy;
while(l1 != null && l2 != null){ // 两者同时满足的时候
if(l1.val <= l2.val){ // 小于等于优先放入l1
p.next = new ListNode(l1.val);
l1 = l1.next;
}else{
p.next = new ListNode(l2.val);
l2 = l2.next;
}
p = p.next; // 迭代进行
}
while(l1!=null){ // 如果链表1的长度还有剩,那么将省下来的放进去
p.next = l1;
p = p.next;
l1 = l1.next;
}
while(l2!=null){ // 如果链表2的长度还有剩,那么将剩下来的放进去
p.next = l2;
p = p.next;
l2 = l2.next;
}
return dummy.next;
}
}