Merge Two Sorted Lists leetcode java

题目:

Merge two sorted linked lists and return it as a new list. The new list
should be made by splicing together the nodes of the first two lists.

题解:

这道题是链表操作题,题解方法很直观。

首先,进行边界条件判断,如果任一一个表是空表,就返回另外一个表。

然后,对于新表选取第一个node,选择两个表表头最小的那个作为新表表头,指针后挪。

然后同时遍历两个表,进行拼接。

因为表已经是sorted了,最后把没有遍历完的表接在新表后面。

由于新表也会指针挪动,这里同时需要fakehead帮助记录原始表头。

代码如下:

1     public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
 2         if(l1==null)
 3             return l2;
 4         if(l2==null)
 5             return l1;
 6             
 7         ListNode l3;
 8         if(l1.val<l2.val){
 9             l3 = l1;
10             l1 = l1.next;
11         }else{
12             l3 = l2;
13             l2 = l2.next;
14         }
15         
16         ListNode fakehead = new ListNode(-1);
17         fakehead.next = l3;
18         while(l1!=null&&l2!=null){
19             if(l1.val<l2.val){
20                 l3.next = l1;
21                 l3 = l3.next;
22                 l1 = l1.next;
23             }else{
24                 l3.next = l2;
25                 l3 = l3.next;
26                 l2 = l2.next;
27             }
28         }
29         
30         if(l1!=null)
31             l3.next = l1;
32         if(l2!=null)
33             l3.next = l2;
34         return fakehead.next;
35     }

更简便的方法是,不需要提前选新表表头。

对于新表声明两个表头,一个是fakehead,一个是会挪动的指针,用于拼接。同时,边界条件在后面的补拼中页解决了,所以开头没必要做边界判断,这样代码简化为:

1     public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
 2         ListNode fakehead = new ListNode(-1);
 3         ListNode l3 = fakehead;
 4         while(l1!=null&&l2!=null){
 5             if(l1.val<l2.val){
 6                 l3.next = l1;
 7                 l3 = l3.next;
 8                 l1 = l1.next;
 9             }else{
10                 l3.next = l2;
11                 l3 = l3.next;
12                 l2 = l2.next;
13             }
14         }
15         
16         if(l1!=null)
17             l3.next = l1;
18         if(l2!=null)
19             l3.next = l2;
20         return fakehead.next;
21     }

Merge Two Sorted Lists leetcode java

时间: 2024-10-12 13:14:06

Merge Two Sorted Lists leetcode java的相关文章

Merge k Sorted Lists leetcode java

题目: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 题解: Merge k sorted linked list就是merge 2 sorted linked list的变形题. 而且我们很自然的就想到了经典的Merge Sort,只不过那个是对数组进行sort.而不同的地方,仅仅是Merge两个list的操作不同. 这里来复习一下Merge

23. Merge k Sorted Lists - LeetCode

Question 23.?Merge k Sorted Lists Solution 题目大意:合并链表数组(每个链表中的元素是有序的),要求合并后的链表也是有序的 思路:遍历链表数组,每次取最小节点 Java实现: public ListNode mergeKLists(ListNode[] lists) { ListNode preHead = new ListNode(0); ListNode minNode = getMinNode(lists); ListNode tmpNode =

Merge Two Sorted Lists—LeetCode

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. https://leetcode.com/problems/merge-two-sorted-lists/ 题意就是合并两个有序的链表,说实话,这个题我一开始还真有点轻视,不就是merge sort里一步么,但是真写

Merge K Sorted Lists -- LeetCode

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 思路:构建一个大小为K的小顶堆.每次从堆顶取走一个元素后,都将这个元素所属的链表中下一个元素加入堆中.若没有下一个元素则不添加.该过程一直持续到堆空位置.时间复杂度O(nlogk). 用优先队列实现: 用优先队列实现的声明如下: priority_queue<元素类型, 该类型的容器(如vector<

Merge Two Sorted Lists leetcode

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 题目意思为合并两个链表,不能用额外的空间(新链由两个链拼接而成) 思路: 比较简单,直接定义两个指针,分别指向两条链,比较所指向节点的大小 如果指针指向的值为小的,那么就让新链指向小的,同时该指针往后移动 ,新链的当

23. Merge k Sorted Lists via Java

有序列表merge核心思想-->谁小就选谁加入结果 所以这道题的最核心问题也就找到了,就是要找到任意时刻的最小元素.所以需要维持一个数据结构,随时返回其中最小的元素,也就是最堆 然后这道题的难点就变成了写最小堆的comparator 下方代码中有两种我比较喜欢的方式 class Solution { public ListNode mergeKLists(ListNode[] lists) { if(lists==null || lists.length==0){ return null; }

Java for LeetCode 023 Merge k Sorted Lists

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 解题思路一: 之前我们有mergeTwoLists(ListNode l1, ListNode l2)方法,直接调用的话,需要k-1次调用,每次调用都需要产生一个ListNode[],空间开销很大.如果采用分治的思想,对相邻的两个ListNode进行mergeTwoLists,每次将规模减少一半,直到

[Leetcode][JAVA] Merge Two Sorted Lists &amp; Sort List

Merge Two Sorted Lists: Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 两个排好序的链表拼接,只要用两个指针遍历链表即可. 可以借助一个helper指针来进行开头的合并.如果有一个遍历完,则直接把另一个链表指针之后的部分全部接在后面: 1

LeetCode:Merge Two Sorted Lists - 拼接两个有序链表

1.题目名称 Merge Two Sorted Lists(按升序拼接两个有序链表) 2.题目地址 https://leetcode.com/problems/merge-two-sorted-lists/ 3.题目内容 英文:Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two l