合并两个有序链表_21
21. 合并两个有序链表:https://leetcode-cn.com/problems/merge-two-sorted-lists/
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
class Solution { public ListNode mergeTwoLists(ListNode list1, ListNode list2) { ListNode dummyHead = new ListNode(0); ListNode head = dummyHead; while (list1 != null && list2 != null) { if (list1.val < list2.val) { head.next = list1; list1 = list1.next; } else { head.next = list2; list2 = list2.next; } head = head.next; } head.next = list1 == null ? list2 : list1; return dummyHead.next; } }
23. 合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
class Solution { public ListNode mergeKLists(ListNode[] lists) { return merge(lists, 0, lists.length-1); } public ListNode merge(ListNode[] lists, int l, int r){ if(l == r) { return lists[l]; } if(l > r) { return null; } int mid = (l + r) >> 1; return mergerTwoLists(merge(lists, l, mid), merge(lists, mid+1, r)); } public ListNode mergerTwoLists(ListNode l1, ListNode l2){ ListNode dummy = new ListNode(0); ListNode prev = dummy; while(l1 != null && l2 != null) { int x = l1 == null ? 0: l1.val; int y = l2 == null ? 0: l2.val; if(x <= y){ prev.next = l1; l1 = l1.next; } else { prev.next = l2; l2 = l2.next; } prev = prev.next; } prev.next = l1 == null ? l2: l1; return dummy.next; } }

浙公网安备 33010602011771号