思路:
新建一条新的链表,比较传入的2个链表的第一个节点,将较小值的传入新的链表
关键在于,声明新链表时,要创建2个指针,一个指头,一个随着过程变动
还要为传入的2个链表各自创建1一个随过程变动的指针
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null||l2==null){
return l1==null?l2:l1;
}
ListNode head=new ListNode(0);
ListNode tail=head;
ListNode res1=l1;
ListNode res2=l2;
while(res1!=null&&res2!=null){
if(res1.val<res2.val){
tail.next=res1;
res1=res1.next;
}
else{
tail.next=res2;
res2=res2.next;
}
tail=tail.next;
}
if(res1==null){
tail.next=res2;
}
if(res2==null){
tail.next=res1;
}
return head.next;
}
}
分解:
if(res1==null){
tail.next=res2;
}
if(res2==null){
tail.next=res1;
}
1)以上代码简化地写出三元表达式:
tail.next=res1==null?res2:res1;
2)新链表的两个指针:head和tail
l1和l2的指针:res1和res2