LeetCode21.合并两个有序链表
题目地址:https://leetcode-cn.com/problems/merge-two-sorted-lists/
题目描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
解法一:迭代,归并思想。
时间复杂度:O(M+N),两个链表的长度。
时间复杂度:O(1)
public ListNode mergeTwoLists(ListNode l1, ListNode l2) { //利用哑节点,保存 ListNode prevHead = new ListNode(-1); ListNode prevNode = prevHead; /** * 从两个链表的头开始进行比较,哪个节点值更小,就将prevNode指向它。 */ while(l1 != null && l2!=null){ if (l1.val <= l2.val){ prevNode.next = l1; l1 = l1.next; }else { prevNode.next = l2; l2 = l2.next; } prevNode = prevNode.next; } //将链表末尾指向位合并完的链表 prevNode.next = l1 == null ? l2 : l1; //利用哑节点返回 return prevHead.next; }
解法二:递归
public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null){ return l2; } if (l2 == null){ return l1; } if (l1.val <= l2.val){ l1.next = mergeTwoLists(l1.next,l2); return l1; }else { l2.next = mergeTwoLists(l1, l2.next); return l2; } }
学习的博客多用于在笔记中,防止笔记过于臃肿,所以将样例及运行结果放在博客中,后以超链接的形式记录在笔记中,所以有些博文过于单薄。如果有小伙伴遇到问题欢迎评论,看到就会回复,学渣一枚,加油努力。