2022-5-9 链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode() {}
 7  *     ListNode(int val) { this.val = val; }
 8  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 9  * }
10  */
11 class Solution {
12     public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
13         ListNode dummy=new ListNode(0),head=dummy;
14         while (list1!=null&&list2!=null){
15             if (list1.val<list2.val){
16                 head.next=new ListNode(list1.val);
17                 list1=list1.next;  
18             }else {
19                 head.next=new ListNode(list2.val);
20                 list2=list2.next;
21             }
22             head=head.next;
23         }
24         ListNode temp=list1==null?list2:list1;
25         while (temp!=null){
26             head.next=new ListNode(temp.val);
27             head=head.next;
28             temp=temp.next;
29         }
30         return dummy.next;
31     }
32 }

思路:双指针 实现排序。

 

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode() {}
 7  *     ListNode(int val) { this.val = val; }
 8  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 9  * }
10  */
11 class Solution {
12     public ListNode mergeKLists(ListNode[] lists) {
13         PriorityQueue<ListNode> queue=new PriorityQueue<>(
14             (a,b)->(a.val-b.val)
15         );
16         for (ListNode x:lists){
17             if (x!=null) queue.offer(x);
18         }
19         ListNode dummy=new ListNode(0),head=dummy;
20         while (!queue.isEmpty()){
21             ListNode temp=queue.poll();
22             head.next=new ListNode(temp.val);
23             head=head.next;
24             temp=temp.next;
25             if (temp!=null) queue.offer(temp);
26         }
27         return dummy.next;
28     }
29 }

思路:优先队列来处理多个链表中的最小值。

posted on 2022-05-09 12:58  阿ming  阅读(20)  评论(0编辑  收藏  举报

导航