Skip to content

Commit 0986bcf

Browse files
committed
[LeetCode] Merge Two Sorted Lists
1 parent 7eb39e4 commit 0986bcf

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package linkedlist;
2+
3+
/**
4+
* Merge two sorted linked lists and return it as a new sorted list.
5+
* The new list should be made by splicing together the nodes of the first two lists.
6+
* <p>
7+
* Example:
8+
* <p>
9+
* Input: 1->2->4, 1->3->4
10+
* Output: 1->1->2->3->4->4
11+
*/
12+
public class MergeTwoSortedLists {
13+
14+
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
15+
if (l1 == null) return l2;
16+
if (l2 == null) return l1;
17+
18+
ListNode head = new ListNode(-1);
19+
ListNode c = head;
20+
ListNode c1 = l1;
21+
ListNode c2 = l2;
22+
23+
while (c1 != null || c2 != null) {
24+
25+
if (c1 == null || (c2 != null && c1.val > c2.val)) {
26+
c.next = c2;
27+
c = c.next;
28+
c2 = c2.next;
29+
} else {
30+
c.next = c1;
31+
c = c.next;
32+
c1 = c1.next;
33+
}
34+
35+
}
36+
37+
return head.next;
38+
}
39+
40+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package linkedlist;
2+
3+
import lombok.val;
4+
import org.junit.Test;
5+
6+
import static org.junit.Assert.assertEquals;
7+
8+
public class MergeTwoSortedListsTest {
9+
10+
@Test
11+
public void mergeTwoListsExample1() {
12+
13+
// given: 1->2->4, 1->3->4
14+
val nodeA1 = new ListNode(1);
15+
val nodeA2 = new ListNode(2);
16+
val nodeA3 = new ListNode(4);
17+
val nodeB1 = new ListNode(1);
18+
val nodeB2 = new ListNode(3);
19+
val nodeB3 = new ListNode(4);
20+
nodeA1.next = nodeA2;
21+
nodeA2.next = nodeA3;
22+
nodeB1.next = nodeB2;
23+
nodeB2.next = nodeB3;
24+
25+
// when
26+
val merged = new MergeTwoSortedLists().mergeTwoLists(nodeA1, nodeB1);
27+
28+
// then: 1->1->2->3->4->4
29+
assertEquals(nodeA1.val, merged.val);
30+
assertEquals(nodeB1.val, merged.next.val);
31+
assertEquals(nodeA2.val, merged.next.next.val);
32+
assertEquals(nodeB2.val, merged.next.next.next.val);
33+
assertEquals(nodeA3.val, merged.next.next.next.next.val);
34+
assertEquals(nodeB3.val, merged.next.next.next.next.next.val);
35+
}
36+
37+
@Test
38+
public void mergeTwoListsExample2() {
39+
// given: 2, 1
40+
val nodeA1 = new ListNode(2);
41+
val nodeB1 = new ListNode(1);
42+
43+
// when
44+
val merged = new MergeTwoSortedLists().mergeTwoLists(nodeA1, nodeB1);
45+
46+
// then: 1->2
47+
assertEquals(nodeB1.val, merged.val);
48+
assertEquals(nodeA1.val, merged.next.val);
49+
}
50+
51+
}

0 commit comments

Comments
 (0)