class
Node {
int
data;
Node next;
public
Node(
int
data) {
this
.data = data;
this
.next =
null
;
}
}
class
LinkedList {
Node head;
public
void
swapNodes(
int
x,
int
y) {
if
(x == y) {
return
;
}
Node prevX =
null
, currX = head;
while
(currX !=
null
&& currX.data != x) {
prevX = currX;
currX = currX.next;
}
Node prevY =
null
, currY = head;
while
(currY !=
null
&& currY.data != y) {
prevY = currY;
currY = currY.next;
}
if
(currX ==
null
|| currY ==
null
) {
return
;
}
if
(prevX !=
null
) {
prevX.next = currY;
}
else
{
head = currY;
}
if
(prevY !=
null
) {
prevY.next = currX;
}
else
{
head = currX;
}
Node temp = currX.next;
currX.next = currY.next;
currY.next = temp;
}
public
void
bubbleSort() {
if
(head ==
null
) {
return
;
}
int
count =
0
;
Node start = head;
while
(start !=
null
) {
count++;
start = start.next;
}
for
(
int
i =
0
; i < count; i++) {
Node curr = head;
while
(curr !=
null
&& curr.next !=
null
) {
if
(curr.data > curr.next.data) {
swapNodes(curr.data, curr.next.data);
}
curr = curr.next;
}
}
}
public
void
printList() {
Node tmp = head;
while
(tmp !=
null
) {
System.out.print(tmp.data +
" -> "
);
tmp = tmp.next;
}
System.out.println(
"None"
);
}
}
public
class
Main {
public
static
void
main(String[] args) {
int
[] arr = {
78
,
20
,
10
,
32
,
1
,
5
};
LinkedList llist =
new
LinkedList();
llist.head =
new
Node(arr[
0
]);
Node start = llist.head;
for
(
int
i =
1
; i < arr.length; i++) {
start.next =
new
Node(arr[i]);
start = start.next;
}
System.out.println(
"Linked list before sorting"
);
llist.printList();
llist.bubbleSort();
System.out.println(
"Linked list after sorting"
);
llist.printList();
}
}