mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-19 17:54:42 +08:00
* Update SinglyLinkedList
* Refactor MergeSortedSinglyLinkedList to single file * Create Problem09 and Problem10 in Project Euler
This commit is contained in:
51
DataStructures/Lists/MergeSortedSinglyLinkedList.java
Normal file
51
DataStructures/Lists/MergeSortedSinglyLinkedList.java
Normal file
@ -0,0 +1,51 @@
|
||||
package DataStructures.Lists;
|
||||
|
||||
public class MergeSortedSinglyLinkedList extends SinglyLinkedList {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SinglyLinkedList listA = new SinglyLinkedList();
|
||||
SinglyLinkedList listB = new SinglyLinkedList();
|
||||
|
||||
for (int i = 2; i <= 10; i += 2) {
|
||||
listA.insert(i);
|
||||
listB.insert(i - 1);
|
||||
}
|
||||
assert listA.toString().equals("2->4->6->8->10");
|
||||
assert listB.toString().equals("1->3->5->7->9");
|
||||
assert merge(listA, listB).toString().equals("1->2->3->4->5->6->7->8->9->10");
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge two sorted SingleLinkedList
|
||||
*
|
||||
* @param listA the first sorted list
|
||||
* @param listB the second sored list
|
||||
* @return merged sorted list
|
||||
*/
|
||||
public static SinglyLinkedList merge(SinglyLinkedList listA, SinglyLinkedList listB) {
|
||||
Node headA = listA.getHead();
|
||||
Node headB = listB.getHead();
|
||||
|
||||
int size = listA.size() + listB.size();
|
||||
|
||||
Node head = new Node();
|
||||
Node tail = head;
|
||||
while (headA != null && headB != null) {
|
||||
if (headA.value <= headB.value) {
|
||||
tail.next = headA;
|
||||
headA = headA.next;
|
||||
} else {
|
||||
tail.next = headB;
|
||||
headB = headB.next;
|
||||
}
|
||||
tail = tail.next;
|
||||
}
|
||||
if (headA == null) {
|
||||
tail.next = headB;
|
||||
}
|
||||
if (headB == null) {
|
||||
tail.next = headA;
|
||||
}
|
||||
return new SinglyLinkedList(head.next, size);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user