using
System;
public
class
Node
{
public
int
data;
public
Node next;
public
Node prev;
public
Node(
int
val)
{
data = val;
next =
null
;
prev =
null
;
}
}
public
class
MainClass
{
static
void
MoveKthToEnd(Node head,
int
K)
{
if
(head ==
null
|| K < 1)
{
return
;
}
Node current = head;
Node prevKth =
null
;
if
(K == 1)
{
Node newHead = head.next;
head.prev =
null
;
Node firstTail = head;
while
(firstTail.next !=
null
)
{
firstTail = firstTail.next;
}
firstTail.next = current;
current.prev = firstTail;
current.next =
null
;
head = newHead;
return
;
}
for
(
int
i = 1; i < K && current !=
null
; i++)
{
prevKth = current;
current = current.next;
}
if
(current ==
null
)
{
return
;
}
if
(prevKth !=
null
)
{
prevKth.next = current.next;
}
if
(current.next !=
null
)
{
current.next.prev = prevKth;
}
Node tail = head;
while
(tail.next !=
null
)
{
tail = tail.next;
}
tail.next = current;
current.prev = tail;
current.next =
null
;
}
static
void
PrintList(Node head)
{
while
(head !=
null
)
{
Console.Write(head.data);
if
(head.next !=
null
)
{
Console.Write(
" <-> "
);
}
head = head.next;
}
Console.WriteLine(
" -> NULL"
);
}
public
static
void
Main(
string
[] args)
{
Node node1 =
new
Node(2);
Node node2 =
new
Node(6);
Node node3 =
new
Node(3);
Node node4 =
new
Node(8);
Node node5 =
new
Node(11);
Node node6 =
new
Node(23);
Node node7 =
new
Node(7);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = node6;
node6.next = node7;
node2.prev = node1;
node3.prev = node2;
node4.prev = node3;
node5.prev = node4;
node6.prev = node5;
node7.prev = node6;
Node head = node1;
Console.Write(
"Original List: "
);
PrintList(head);
MoveKthToEnd(head, 2);
Console.Write(
"Modified List: "
);
PrintList(head);
}
}