一、问题
二、解题思路
我们使用 while 循环每次比较 p1 和 p2 的大小,把较小的节点接到结果链表上。
代码中还用到一个链表的算法题中是很常见的「虚拟头结点」技巧,也就是 dummy 节点。你可以试试,如果不使用 dummy 虚拟节点,代码会复杂很多,而有了 dummy 节点这个占位符,可以避免处理空指针的情况,降低代码的复杂性。
二、解题代码
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
// 虚拟头结点
ListNode dummy = new ListNode(-1);
ListNode p = dummy ;
ListNode p1 =list1;
ListNode p2 = list2;
while (p1 != null && p2 != null){
// 比较 p1 和 p2 两个指针
// 将值较小的的节点接到 p 指针
if(p1.val < p2.val){
p.next = p1;
p1 = p1.next;
}else {
p.next = p2;
p2 =p2.next;
}
// p 指针不断前进
p = p.next;
}
if(p1 != null) {
p.next = p1;
}
if(p2 != null){
p.next = p2;
}
return dummy .next;
}