【题目】
Merge two sorted linked lists and return it as a new list. The new list should be made by
splicing together the nodes of the first two lists.
【答案】
1.解法一:最麻烦的有三点:
1)边界条件怎么考虑,l1、l2为空的情况,注意同时为空已归入有一个为空的情况;
2)l1、l2理解成数据没有意义的头结点还是第一个节点。这里理解为第一个节点;
3)L3和p3初始化怎么进行,如果看第一个节点谁更小就初始化为谁,则代码感觉庞杂冗余,和while中的代码重合较多。整个代码显得逻辑不清晰。于是构建一个虚拟头结点,最后返回值设为L3.next即可。
public class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null){
return l2;
}else if(l2==null){
return l1;
}
ListNode L3=new ListNode(0); //头结点
ListNode p3=L3;
while(l1!=null&&l2!=null){
if(l1.val<l2.val){
p3.next=l1;
l1=l1.next;
}else{
p3.next=l2;
l2=l2.next;
}
p3=p3.next;
}
if(l1!=null){
p3.next=l1;
}else{
p3.next=l2;
}
return L3.next;
}
}