题目描述
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.
将两个有序的链表合并成一个
解题思路
通过比较两个链表的头节点,得到val较小的那个作为被插入链表,即outerNode,大的那个作为待插入链表,即innerNode。
while(outerNode!=null && innerNode!=null)
则判断innerNode和当前outerNode的val大小,小于等于则插入,outerNode不变,innerNode = innerNode.next,大于则outerNode = outerNode.next;
需要注意:被插入链表长度小于待插入链表长度的情况。
代码
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null && l2==null)
return null;
if(l1==null && l2!=null)
return l2;
if(l2==null && l1!=null)
return l1;
ListNode outerNode = l1;
ListNode innerNode = l2;
ListNode result,lastNode,tempNode;
//确立那个链表的头是最终的表头,将innerNode的链表插入的outerNode链表中
if(l1.val > l2.val){
outerNode = l2;
innerNode = l1;
}
result = outerNode;//最终返回的链表头
lastNode = outerNode;//记录被插入链表的上一个节点
outerNode = outerNode.next;
while(outerNode!=null && innerNode!=null){
if(innerNode.val<=outerNode.val){
//内层链表插入到外层链表中
tempNode = innerNode.next;
lastNode.next = innerNode;
innerNode.next = outerNode;
lastNode = innerNode;
innerNode = tempNode;
} else {
lastNode = outerNode;
outerNode = outerNode.next;
}
}
//如果外层链表长度小于待插入链表,则将剩余的连接上
if(outerNode==null && innerNode!=null){
lastNode.next = innerNode;
}
return result;
}