【java】剑指offer25_合并两个排序的链表
作者:互联网
题目描述
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:0 <= 链表长度 <= 1000
我的解题思路一:迭代,利用两个链表指针思想,遍历两个链表直至链表都为Null,当某一个链表为空时则将另外一个链表所剩节点全部加到新链表后,反正判断两个节点数值大小,追加小的节点到新链表后,追加后相应链表往后移动一位,其中难点是定义一个空链表头,用cur指向其新链表头即cur.next = l1或cur.next = l2,每次追加的时候移动cur指向,即cur=cur.next ,最后 返回的时候返回该新链表后next位链表,即mergeNode.next
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode mergeNode = new ListNode(0), cur = mergeNode;
while (l1 != null || l2 != null){
if(l1 == null){
cur.next = l2;
return mergeNode.next;
}else if(l2 == null){
cur.next = l1;
return mergeNode.next;
}
if(l1.val<=l2.val){
cur.next= l1;
l1 = l1.next;
}else {
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
return mergeNode.next;
}
解题思路二:递归,判断边界值链表为空的情况,则返回不会空的链表,否则递归传递更小数值的链表下一位,即l1.next = mergeTwoLists(l1.next,l2);或l2.next = mergeTwoLists(l1,l2.next);
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null || l2 == null){
return l1 == null ? l2 :l1;
}
if(l1.val <= l2.val){
l1.next = mergeTwoLists(l1.next,l2);
return l1;
}else {
l2.next = mergeTwoLists(l1,l2.next);
return l2;
}
}
标签:java,cur,offer25,next,链表,l2,l1,ListNode 来源: https://blog.csdn.net/ic_xcc/article/details/112918312