using
System;
class
Node {
public
int
data;
public
Node next;
public
Node(
int
data) {
this
.data = data;
this
.next =
null
;
}
}
class
LinkedList {
public
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
) {
Console.Write(tmp.data +
" -> "
);
tmp = tmp.next;
}
Console.WriteLine(
"None"
);
}
}
public
class
LinkedListMain {
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;
}
Console.WriteLine(
"Linked list before sorting"
);
llist.PrintList();
llist.BubbleSort();
Console.WriteLine(
"Linked list after sorting"
);
llist.PrintList();
}
}