Skip to main content

Print middle element of linked list using recursion in python

Print middle node of linked list

Python program for Print middle element of linked list using recursion. Here mentioned other language solution.

#  Python 3 program for
#  Find middle of singly linked list using recursion

#  Linked list node
class LinkNode :
    def __init__(self, data) :
        self.data = data
        self.next = None
class SingleLL :
    def __init__(self) :
        self.head = None
        self.tail = None
    #  Add new Node at end of linked list
    def addNode(self, data) :
        node = LinkNode(data)
        if (self.head == None) :
            self.head = node
        else :
            #  Append the node at last position
            self.tail.next = node
        self.tail = node
    #  Display linked list element
    def display(self) :
        if (self.head == None) :
            print("\n Empty linked list")
            return
        temp = self.head
        # iterating linked list elements
        while (temp != None) :
            print("",temp.data, end = " →")
            #  Visit to next node
            temp = temp.next
        print(" NULL")
    #  Find and print middle element
    def printMiddle(self, node,  mid) :
        if (node != None and 
            node.next != None and 
            node.next.next != None) :
            #  Recursively finding the middle node
            self.printMiddle(node.next.next, mid.next)
        else :
            #  When we get middle node
            print(" Middle Node :",mid.data)
    #  Handling the the request of 
    #  finding middle of given linked list
    def findMiddle(self) :
        if (self.head == None) :
            print(" Empty Linked List")
        elif (self.head.next == None) :
            #  When single node exist
            print(" Linked list contains only one node")
        else :
            print("\n Linked List ")
            self.display()
            self.printMiddle(self.head, self.head)
def main() :
    sll1 = SingleLL()
    sll2 = SingleLL()
    #  First linked list
    #  1 → 2 → 3 → 4 → -5 → 6 → 7 → NULL
    sll1.addNode(1)
    sll1.addNode(2)
    sll1.addNode(3)
    sll1.addNode(4)
    sll1.addNode(5)
    sll1.addNode(6)
    sll1.addNode(7)
    #  Second linked list
    #  4 → 9 → 7 → 3 → 8 → 6 → NULL
    sll2.addNode(4)
    sll2.addNode(9)
    sll2.addNode(7)
    sll2.addNode(3)
    sll2.addNode(8)
    sll2.addNode(6)
    #  Test A
    sll1.findMiddle()
    #  Test B
    sll2.findMiddle()


if __name__=="__main__":
    main()

Output

 Linked List
 1 → 2 → 3 → 4 → 5 → 6 → 7 → NULL
 Middle Node : 4

 Linked List
 4 → 9 → 7 → 3 → 8 → 6 → NULL
 Middle Node : 7




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment