Split a Circular Linked List Python
- Get link
- X
- Other Apps
PROGRAM TO SPLIT A CIRCULAR LINKED LIST INTO TWO HALVES
# A node structure
class
Node:
# Constructor to create a new node
def
__init__(
self
, data):
self
.data
=
data
self
.
next
=
None
# Class to create a new Circular Linked list
class
CircularLinkedList:
# Constructor to create a empty circular linked list
def
__init__(
self
):
self
.head
=
None
# Function to insert a node at the beginning of a
# circular linked list
def
push(
self
, data):
ptr1
=
Node(data)
temp
=
self
.head
ptr1.
next
=
self
.head
# If linked list is not None then set the next of
# last node
if
self
.head
is
not
None
:
while
(temp.
next
!
=
self
.head):
temp
=
temp.
next
temp.
next
=
ptr1
else
:
ptr1.
next
=
ptr1
# For the first node
self
.head
=
ptr1
# Function to print nodes in a given circular linked list
def
printList(
self
):
temp
=
self
.head
if
self
.head
is
not
None
:
while
(
True
):
print
"%d"
%
(temp.data),
temp
=
temp.
next
if
(temp
=
=
self
.head):
break
# Function to split a list (starting with head) into
# two lists. head1 and head2 are the head nodes of the
# two resultant linked lists
def
splitList(
self
, head1, head2):
slow_ptr
=
self
.head
fast_ptr
=
self
.head
if
self
.head
is
None
:
return
# If htere are odd nodes in the circular list then
# fast_ptr->next becomes head and for even nodes
# fast_ptr->next->next becomes head
while
(fast_ptr.
next
!
=
self
.head
and
fast_ptr.
next
.
next
!
=
self
.head ):
fast_ptr
=
fast_ptr.
next
.
next
slow_ptr
=
slow_ptr.
next
# If there are even elements in list then
# move fast_ptr
if
fast_ptr.
next
.
next
=
=
self
.head:
fast_ptr
=
fast_ptr.
next
# Set the head pointer of first half
head1.head
=
self
.head
# Set the head pointer of second half
if
self
.head.
next
!
=
self
.head:
head2.head
=
slow_ptr.
next
# Make second half circular
fast_ptr.
next
=
slow_ptr.
next
# Make first half circular
slow_ptr.
next
=
self
.head
# Driver program to test above functions
# Initialize lists as empty
head
=
CircularLinkedList()
head1
=
CircularLinkedList()
head2
=
CircularLinkedList()
head.push(
12
)
head.push(
56
)
head.push(
2
)
head.push(
11
)
print
"Original Circular Linked List"
head.printList()
# Split the list
head.splitList(head1 , head2)
print
"\nFirst Circular Linked List"
head1.printList()
print
"\nSecond Circular Linked List"
head2.printList()
OUTPUT:
Original Circular Linked List 11 2 56 12 First Circular Linked List 11 2 Second Circular Linked List 56 12
- Get link
- X
- Other Apps
Comments
Post a Comment