https://github.com/emahtab/merge-two-sorted-lists
Merge Two Sorted Linked Lists
https://github.com/emahtab/merge-two-sorted-lists
leetcode linked-list merge-sorted-lists min-heap priority-queue problem-solving
Last synced: 3 months ago
JSON representation
Merge Two Sorted Linked Lists
- Host: GitHub
- URL: https://github.com/emahtab/merge-two-sorted-lists
- Owner: eMahtab
- Created: 2020-02-13T19:11:56.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-05-18T07:32:30.000Z (over 5 years ago)
- Last Synced: 2025-06-07T20:06:33.077Z (4 months ago)
- Topics: leetcode, linked-list, merge-sorted-lists, min-heap, priority-queue, problem-solving
- Size: 4.88 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Merge Two Sorted Linked Lists
# https://leetcode.com/problems/merge-two-sorted-listsMerge 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.
```
Example:Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4
```# Implementation 1 :
```java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null || l2 == null)
return l1 == null ? l2 : l1;
Queue pq = new PriorityQueue<>();
addNodes(l1, pq);
addNodes(l2, pq);
ListNode head = null;
ListNode prev = null;
ListNode node = null;
while(!pq.isEmpty()) {
node = new ListNode(pq.poll());
if(head == null)
head = node;
if(prev != null)
prev.next = node;
prev = node;
}
return head;
}
private void addNodes(ListNode head, Queue q) {
ListNode current = head;
while(current != null) {
q.add(current.val);
current = current.next;
}
}
}
```# Implementation 2 :
```java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null || l2 == null)
return l1 == null ? l2 : l1;
ListNode p1 = l1, p2 = l2;
ListNode head = null;
ListNode prev = null;
ListNode node = null;
while(p1 != null && p2 != null) {
if(p1.val <= p2.val) {
node = new ListNode(p1.val);
p1 = p1.next;
} else {
node = new ListNode(p2.val);
p2 = p2.next;
}
if(head == null)
head = node;
if(prev != null)
prev.next = node;
prev = node;
}
while(p1 != null){
node = new ListNode(p1.val);
prev.next = node;
prev = node;
p1 = p1.next;
}
while(p2 != null) {
node = new ListNode(p2.val);
prev.next = node;
prev = node;
p2 = p2.next;
}
return head;
}
}
```