合并链表题解
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法一(迭代)
迭达是遍历的一种重要方法,已经知道两个链表是按顺序进行排列的,分别去寻找两个链表,如果链表A的值小于等于链表B的值,A链表加入到新链表C中,并且A链表去头操作,复杂度O(m+n)
代码
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode merge = new ListNode(-1);
ListNode head = merge; //记录新链表的头
while (l1 != null && l2 != null) {
if(l1.val <= l2.val){
merge.next = new ListNode(l1.val);
l1=l1.next;
}else {
merge.next = new ListNode(l2.val);
l2 = l2.next;
}
merge = merge.next;
}
merge.next =l1==null?l2:l1; //使用三目表达式
return head.next;
}
方法二(递归)
递归yyds,考虑边界条件,即当一个链表为空时,结束递归,用栈的思想记录路径
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) return l2;
if (l2 == null) return l1;
if(l1.val > l2.val){
l2.next=mergeTwoLists(l1,l2.next);
return l2;
}else {
l1.next=mergeTwoLists(l1.next,l2);
return l1;
}
}
此处评论已关闭