算法思路:新建一个头结点,采用双指针,从两个有序链表的头部向后遍历,谁小谁链到头结点之后,不断往后移动。
代码实现:
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
//如果其中有一个链表为空,则直接返回另一个链表的头节点
if(list1==null || list2==null) return list1==null?list2:list1;//
ListNode head=list1.val<=list2.val?list1:list2;//head首先执行值较小的节点
ListNode pre=head;//工作节点
ListNode cur1=head.next;//值较小节点的后一个节点
ListNode cur2=head==list1?list2:list1;//值较大节点
while(cur1!=null && cur2!=null){
if(cur1.val<=cur2.val){
pre.next=cur1;
cur1=cur1.next;
}else {
pre.next=cur2;
cur2=cur2.next;
}
pre=pre.next;
}
//当其中有一个链表已经遍历完成,将另一个链表的后面所有节点都链接到工作节点之后
pre.next=cur1==null?cur2:cur1;
return head;
}