mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-15 01:40:49 +08:00
52 lines
1.3 KiB
Java
52 lines
1.3 KiB
Java
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);
|
|
}
|
|
}
|