Rearrange a linked list Python
- Get link
- X
- Other Apps
PROGRAM TO REARRANGE A LINKED LIST SUCH THAT ALL EVEN AND ODD POSITIONED NODES ARE TOGETHER
# Linked List Node
class
Node:
def
__init__(
self
, d):
self
.data
=
d
self
.
next
=
None
class
LinkedList:
def
__init__(
self
):
self
.head
=
None
# A utility function to create
# a new node
def
newNode(
self
, key):
temp
=
Node(key)
self
.
next
=
None
return
temp
# Rearranges given linked list
# such that all even positioned
# nodes are before odd positioned.
# Returns new head of linked List.
def
rearrangeEvenOdd(
self
, head):
# Corner case
if
(
self
.head
=
=
None
):
return
None
# Initialize first nodes of
# even and odd lists
odd
=
self
.head
even
=
self
.head.
next
# Remember the first node of even list so
# that we can connect the even list at the
# end of odd list.
evenFirst
=
even
while
(
1
=
=
1
):
# If there are no more nodes,
# then connect first node of even
# list to the last node of odd list
if
(odd
=
=
None
or
even
=
=
None
or
(even.
next
)
=
=
None
):
odd.
next
=
evenFirst
break
# Connecting odd nodes
odd.
next
=
even.
next
odd
=
even.
next
# If there are NO more even nodes
# after current odd.
if
(odd.
next
=
=
None
):
even.
next
=
None
odd.
next
=
evenFirst
break
# Connecting even nodes
even.
next
=
odd.
next
even
=
odd.
next
return
head
# A utility function to print a linked list
def
printlist(
self
, node):
while
(node !
=
None
):
print
(node.data, end
=
"")
print
(
"->"
, end
=
"")
node
=
node.
next
print
(
"NULL"
)
# Function to insert a new node
# at the beginning
def
push(
self
, new_data):
new_node
=
Node(new_data)
new_node.
next
=
self
.head
self
.head
=
new_node
# Driver code
ll
=
LinkedList()
ll.push(
5
)
ll.push(
4
)
ll.push(
3
)
ll.push(
2
)
ll.push(
1
)
print
(
"Given Linked List"
)
ll.printlist(ll.head)
start
=
ll.rearrangeEvenOdd(ll.head)
print
(
"\nModified Linked List"
)
ll.printlist(start)
OUTPUT
Given Linked List 1->2->3->4->5->NULL Modified Linked List 1->3->5->2->4->NULL
- Get link
- X
- Other Apps
Comments
Post a Comment