Skip to content

Commit

Permalink
Make ListNode Reusable
Browse files Browse the repository at this point in the history
  • Loading branch information
dksifoua committed Sep 1, 2024
1 parent 3f1773d commit bd255dc
Show file tree
Hide file tree
Showing 13 changed files with 188 additions and 205 deletions.
16 changes: 3 additions & 13 deletions src/main/java/io/dksifoua/leetcode/addtwonumbers/Solution.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package io.dksifoua.leetcode.addtwonumbers;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import io.dksifoua.leetcode.utils.ListNode;

public class Solution {

Expand All @@ -16,11 +14,11 @@ public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
while (l1 != null || l2 != null) {
int sum = retention;
if (l1 != null) {
sum += l1.getVal();
sum += l1.getValue();
l1 = l1.getNext();
}
if (l2 != null) {
sum += l2.getVal();
sum += l2.getValue();
l2 = l2.getNext();
}
retention = sum / 10;
Expand All @@ -34,12 +32,4 @@ public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

return result.getNext();
}

@AllArgsConstructor
@Getter
@Setter
public static final class ListNode {
private int val;
private ListNode next;
}
}
12 changes: 1 addition & 11 deletions src/main/java/io/dksifoua/leetcode/linkedlistcycle/Solution.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package io.dksifoua.leetcode.linkedlistcycle;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import io.dksifoua.leetcode.utils.ListNode;

public class Solution {

Expand All @@ -18,12 +16,4 @@ public boolean hasCycle(ListNode head) {

return false;
}

@AllArgsConstructor
@Getter
@Setter
public static final class ListNode {
private int val;
private ListNode next;
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package io.dksifoua.leetcode.mergetwosortedlists;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import io.dksifoua.leetcode.utils.ListNode;

public class Solution {

Expand All @@ -12,17 +10,17 @@ public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
while (current1 != null || current2 != null) {
int val;
if (current1 != null && current2 != null) {
val = Math.min(current1.getVal(), current2.getVal());
if (current1.getVal() <= current2.getVal()) {
val = Math.min(current1.getValue(), current2.getValue());
if (current1.getValue() <= current2.getValue()) {
current1 = current1.getNext();
} else {
current2 = current2.getNext();
}
} else if (current1 == null) {
val = current2.getVal();
val = current2.getValue();
current2 = current2.getNext();
} else {
val = current1.getVal();
val = current1.getValue();
current1 = current1.getNext();
}

Expand All @@ -44,11 +42,11 @@ public ListNode mergeTwoListsOptimal(ListNode list1, ListNode list2) {

ListNode mergedList = new ListNode(0, null), current = mergedList;
while (list1 != null && list2 != null) {
if (list1.getVal() <= list2.getVal()) {
current.setNext(new ListNode(list1.getVal(), null));
if (list1.getValue() <= list2.getValue()) {
current.setNext(new ListNode(list1.getValue(), null));
list1 = list1.getNext();
} else {
current.setNext(new ListNode(list2.getVal(), null));
current.setNext(new ListNode(list2.getValue(), null));
list2 = list2.getNext();
}

Expand All @@ -66,19 +64,11 @@ public ListNode mergeTwoListsRecursive(ListNode list1, ListNode list2) {
if (list2 == null) return list1;

ListNode mergedList = new ListNode(0, null);
if (list1.getVal() < list2.getVal()) {
mergedList.setNext(new ListNode(list1.getVal(), this.mergeTwoListsRecursive(list1.getNext(), list2)));
if (list1.getValue() < list2.getValue()) {
mergedList.setNext(new ListNode(list1.getValue(), this.mergeTwoListsRecursive(list1.getNext(), list2)));
} else {
mergedList.setNext(new ListNode(list2.getVal(), this.mergeTwoListsRecursive(list1, list2.getNext())));
mergedList.setNext(new ListNode(list2.getValue(), this.mergeTwoListsRecursive(list1, list2.getNext())));
}
return mergedList.getNext();
}

@AllArgsConstructor
@Getter
@Setter
public static class ListNode {
private int val;
private ListNode next;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.dksifoua.leetcode.removenthnodefromendoflist;

import io.dksifoua.leetcode.utils.ListNode;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
Expand Down Expand Up @@ -27,12 +28,4 @@ public ListNode removeNthFromEnd(ListNode head, int n) {

return head;
}

@AllArgsConstructor
@Getter
@Setter
public static final class ListNode {
private int val;
private ListNode next;
}
}
30 changes: 1 addition & 29 deletions src/main/java/io/dksifoua/leetcode/reorderlist/Solution.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package io.dksifoua.leetcode.reorderlist;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import io.dksifoua.leetcode.utils.ListNode;

public class Solution {

Expand Down Expand Up @@ -70,30 +68,4 @@ public void reorderList(ListNode head) {
this.merge(head, middle);
System.out.println("Reordered: " + head);
}

@AllArgsConstructor
@Getter
@Setter
public static class ListNode {
private int val;
private ListNode next;

@Override
public String toString() {
StringBuilder result = new StringBuilder();

ListNode current = this;
while (current != null) {
result.append(current.getVal());
if (current.getNext() != null) {
result.append(" -> ");
} else {
result.append(" -> null");
}
current = current.getNext();
}

return result.toString();
}
}
}
14 changes: 2 additions & 12 deletions src/main/java/io/dksifoua/leetcode/reverselinkedlist/Solution.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package io.dksifoua.leetcode.reverselinkedlist;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import io.dksifoua.leetcode.utils.ListNode;


public class Solution {

public ListNode reverseList(ListNode head) {
ListNode reversedHead = null, current = head;
while (current != null) {
reversedHead = new ListNode(current.getVal(), reversedHead);
reversedHead = new ListNode(current.getValue(), reversedHead);
current = current.getNext();
}

Expand All @@ -30,12 +28,4 @@ public ListNode reverseListOptimal(ListNode head) {
}
return head;
}

@AllArgsConstructor
@Getter
@Setter
static class ListNode {
private int val;
private ListNode next;
}
}
59 changes: 59 additions & 0 deletions src/main/java/io/dksifoua/leetcode/utils/ListNode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package io.dksifoua.leetcode.utils;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;
import java.util.List;

@AllArgsConstructor
@Getter
@Setter
public class ListNode {
private int value;
private ListNode next;

public static ListNode build(int[] array) {
ListNode dummy = new ListNode(0, null);

ListNode current = dummy;
for (int element : array) {
ListNode node = new ListNode(element, null);
current.setNext(node);

current = current.getNext();
}

return dummy.getNext();
}

public int[] toArray() {
List<Integer> list = new ArrayList<>();
ListNode current = this;
while (current != null) {
list.add(current.getValue());
current = current.getNext();
}

return list.stream().mapToInt(Integer::intValue).toArray();
}

@Override
public String toString() {
StringBuilder result = new StringBuilder();

ListNode current = this;
while (current != null) {
result.append(current.getValue());
if (current.getNext() != null) {
result.append(" -> ");
} else {
result.append(" -> null");
}
current = current.getNext();
}

return result.toString();
}
}
32 changes: 16 additions & 16 deletions src/test/java/io/dksifoua/leetcode/addtwonumbers/SolutionTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.dksifoua.leetcode.addtwonumbers;

import io.dksifoua.leetcode.addtwonumbers.Solution.ListNode;
import io.dksifoua.leetcode.utils.ListNode;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

Expand All @@ -17,9 +17,9 @@ void test1() {
new ListNode(6,
new ListNode(4, null)));
ListNode result = solution.addTwoNumbers(list1, list2);
Assertions.assertEquals(7, result.getVal());
Assertions.assertEquals(0, result.getNext().getVal());
Assertions.assertEquals(8, result.getNext().getNext().getVal());
Assertions.assertEquals(7, result.getValue());
Assertions.assertEquals(0, result.getNext().getValue());
Assertions.assertEquals(8, result.getNext().getNext().getValue());
Assertions.assertNull(result.getNext().getNext().getNext());
}

Expand All @@ -28,7 +28,7 @@ void test2() {
ListNode list1 = new ListNode(0, null);
ListNode list2 = new ListNode(0, null);
ListNode result = solution.addTwoNumbers(list1, list2);
Assertions.assertEquals(0, result.getVal());
Assertions.assertEquals(0, result.getValue());
Assertions.assertNull(result.getNext());
}

Expand All @@ -46,14 +46,14 @@ void test3() {
new ListNode(9,
new ListNode(9, null))));
ListNode result = solution.addTwoNumbers(list1, list2);
Assertions.assertEquals(8, result.getVal());
Assertions.assertEquals(9, result.getNext().getVal());
Assertions.assertEquals(9, result.getNext().getNext().getVal());
Assertions.assertEquals(9, result.getNext().getNext().getNext().getVal());
Assertions.assertEquals(0, result.getNext().getNext().getNext().getNext().getVal());
Assertions.assertEquals(0, result.getNext().getNext().getNext().getNext().getNext().getVal());
Assertions.assertEquals(0, result.getNext().getNext().getNext().getNext().getNext().getNext().getVal());
Assertions.assertEquals(1, result.getNext().getNext().getNext().getNext().getNext().getNext().getNext().getVal());
Assertions.assertEquals(8, result.getValue());
Assertions.assertEquals(9, result.getNext().getValue());
Assertions.assertEquals(9, result.getNext().getNext().getValue());
Assertions.assertEquals(9, result.getNext().getNext().getNext().getValue());
Assertions.assertEquals(0, result.getNext().getNext().getNext().getNext().getValue());
Assertions.assertEquals(0, result.getNext().getNext().getNext().getNext().getNext().getValue());
Assertions.assertEquals(0, result.getNext().getNext().getNext().getNext().getNext().getNext().getValue());
Assertions.assertEquals(1, result.getNext().getNext().getNext().getNext().getNext().getNext().getNext().getValue());
Assertions.assertNull(result.getNext().getNext().getNext().getNext().getNext().getNext().getNext().getNext());
}

Expand All @@ -66,9 +66,9 @@ void test4() {
new ListNode(6,
new ListNode(4, null)));
ListNode result = solution.addTwoNumbers(list1, list2);
Assertions.assertEquals(7, result.getVal());
Assertions.assertEquals(0, result.getNext().getVal());
Assertions.assertEquals(8, result.getNext().getNext().getVal());
Assertions.assertEquals(7, result.getValue());
Assertions.assertEquals(0, result.getNext().getValue());
Assertions.assertEquals(8, result.getNext().getNext().getValue());
Assertions.assertNull(result.getNext().getNext().getNext());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.dksifoua.leetcode.linkedlistcycle;

import io.dksifoua.leetcode.linkedlistcycle.Solution.ListNode;
import io.dksifoua.leetcode.utils.ListNode;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertFalse;
Expand Down
Loading

0 comments on commit bd255dc

Please sign in to comment.