/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//此题是两个已排序链表合并,需要借助三个节点,两个节点是两个链表的头结点,另一个节点是合并链表的尾节点
//时间复杂度O(m+n)
//注意细节:当一个链表为空时,要直接连接另一个链表(省时间)
//比较讨巧的细节是,首先要申请一个新节点,这样省去了要单独处理头结点的问题
ListNode newHead=new ListNode(-1);
ListNode p1=l1;
ListNode p2=l2;
ListNode last=newHead;
while(p1!=null&&p2!=null){
if(p1.val<=p2.val){
last.next=p1;
p1=p1.next;
}else{
last.next=p2;
p2=p2.next;
}
last=last.next;
}
if(p1!=null){
last.next=p1;
}
if(p2!=null){
last.next=p2;
}
return newHead.next;
}
}