题目:两个链表有序,合成一个新的链表,也有序,且不创建新节点。
public ListNode mergeTwoLists (ListNode l1, ListNode l2)
思路:
1.把l1和l2最小的头结点作为新链表的head
2.关键:l1和l2往后遍历,把更小的链接到新链表中。然后新链表就有序了。
3.最后把l1或l2剩下的一段链接到里面。
注意:
加上l1和l2的判空。当l1为null时直接返回l2(l2可以为null也可以不为null)。
/*
思路:
1.两链表最小的头结点作为新链表的head
2.关键:l1和l2更小的节点作为下一个要链接的节点。
*/
public ListNode mergeTwoLists (ListNode l1, ListNode l2) {
//如果一个为null,另一个不论是不是null都返回
if(l1 == null){
return l2;
}else if(l2 == null){
return l1;
}
ListNode head = (l1.val <= l2.val) ? l1 : l2;
ListNode cur = head;
if(head == l1){
l1 = l1.next;
}else{
l2 = l2.next;
}
//链接l1和l2更小的节点,直到l1和l2有一个为null
while(l1 != null && l2 != null){
if(l1.val <= l2.val){
cur.next = l1;
l1 = l1.next;
}else{
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
//把某个后面剩下的部分链接上
if(l1 == null){
cur.next = l2;
}else{
cur.next = l1;
}
return head;
}