企业解决方案英文百度seo是啥意思
21. 合并两个有序链表 - 力扣(LeetCode)
方法1 优先级队列
之前做过合并k个有序列表,两个方法是一样的
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {//递归,dfs的作用是拼接除了该节点的两个链表,并且返回头结点if(list1 == null) return list2;if(list2 == null) return list1;PriorityQueue<ListNode> queue = new PriorityQueue<>((a,b) -> a.val - b.val);queue.offer(list1);queue.offer(list2);ListNode result = new ListNode(0);ListNode head = result;while(!queue.isEmpty()) {result.next = queue.poll();if(result.next.next != null){queue.offer(result.next.next);}result = result.next;}return head.next;}
}
方法二:递归
就是我们将每个子问题抽离出来,问题就是每次传入两个链表的头节点进行比大小,选出值较小的节点,值较小的那个节点
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {//递归,dfs的作用是拼接除了该节点的两个链表,并且返回头结点if(list1 == null) return list2;if(list2 == null) return list1;if(list1.val < list2.val){list1.next = mergeTwoLists(list1.next, list2);return list1;}else{list2.next = mergeTwoLists(list1, list2.next);return list2;}}
}