import
java.util.ArrayList;
import
java.util.List;
class
ListNode {
int
val;
ListNode next;
ListNode(
int
x) {
val = x;
next =
null
;
}
}
public
class
Main {
public
static
boolean
isPrime(
int
num) {
if
(num <=
1
)
return
false
;
if
(num <=
3
)
return
true
;
if
(num %
2
==
0
|| num %
3
==
0
)
return
false
;
for
(
int
i =
5
; i * i <= num; i +=
6
) {
if
(num % i ==
0
|| num % (i +
2
) ==
0
)
return
false
;
}
return
true
;
}
public
static
ListNode moveKthPrimeToTheEnd(ListNode head,
int
k) {
if
(head ==
null
|| k <=
0
)
return
head;
ListNode curr = head;
ListNode prev =
null
;
List<ListNode> primes =
new
ArrayList<>();
while
(curr !=
null
) {
if
(isPrime(curr.val)) {
primes.add(curr);
if
(primes.size() == k) {
if
(prev ==
null
) {
head = curr.next;
}
else
{
prev.next = curr.next;
}
curr = curr.next;
primes.get(primes.size() -
1
).next =
null
;
break
;
}
else
{
prev = curr;
curr = curr.next;
}
}
else
{
prev = curr;
curr = curr.next;
}
}
if
(k <= primes.size()) {
if
(prev !=
null
) {
prev.next = primes.get(k -
1
);
}
else
{
head = primes.get(k -
1
);
}
}
return
head;
}
public
static
void
printLinkedList(ListNode head) {
while
(head !=
null
) {
System.out.print(head.val +
" -> "
);
head = head.next;
}
System.out.println(
"NULL"
);
}
public
static
void
main(String[] args) {
ListNode head1 =
new
ListNode(
4
);
head1.next =
new
ListNode(
7
);
head1.next.next =
new
ListNode(
11
);
head1.next.next.next =
new
ListNode(
3
);
head1.next.next.next.next =
new
ListNode(
14
);
head1.next.next.next.next.next =
new
ListNode(
2
);
int
k1 =
2
;
System.out.println(
"Example 1:"
);
System.out.print(
"Original Linked List: "
);
printLinkedList(head1);
head1 = moveKthPrimeToTheEnd(head1, k1);
System.out.print(
"Modified Linked List: "
);
printLinkedList(head1);
ListNode head2 =
new
ListNode(
12
);
head2.next =
new
ListNode(
6
);
head2.next.next =
new
ListNode(
18
);
head2.next.next.next =
new
ListNode(
5
);
head2.next.next.next.next =
new
ListNode(
9
);
int
k2 =
1
;
System.out.println(
"Example 2:"
);
System.out.print(
"Original Linked List: "
);
printLinkedList(head2);
head2 = moveKthPrimeToTheEnd(head2, k2);
System.out.print(
"Modified Linked List: "
);
printLinkedList(head2);
}
}