DEV Community

Somnath Das
Somnath Das

Posted on

3 Methods to Find the Middle of a Linkedlist

class Node:
    def __init__(self,data):
        self.data=data
        self.next=None

class LinkedList:
    def __init__(self):
        self.head=None
    def lenofLL(self):
        if self.head is None:
            return 0
        count=0
        current = self.head
        while current:
            count+=1
            current=current.next
        return count

    def middleofLinkedListM1(self):
        if self.head is None:
            return f"Invalid Index"
        current = self.head
        for i in range(self.lenofLL()//2):
            current=current.next
        return current

    def middleofLinkedListM2(self):
        if self.head is None:
            return None
        arr=[]
        current=self.head
        while current:
            arr.append(current.data)
            current=current.next

        return arr[(len(arr)//2)]




    def middlePart(self):
        if self.head is None:
            return None
        current = self.head
        count=0
        while current:
            count+=1
            current=current.next
        present=self.head
        for _ in range(0,int(count//2)):
            present=present.next
        self.head=present 

    def append(self,data):
        new_node=Node(data)

        if self.head is None:
            self.head=new_node
            return

        else:
            current = self.head
            while current.next:
                current=current.next
            current.next = new_node
            new_node.next = None
    def printList(self):
        if self.head is None:
            return None
        current = self.head
        while current:
            print(current.data)
            current = current.next

if __name__ == "__main__":
    my_list = LinkedList()
    my_list.append(1)
    my_list.append(2)
    my_list.append(3)
    my_list.append(4)
    my_list.append(5)
    my_list.append(6)

    print("Length of list:", my_list.lenofLL()) 

    middle_node = my_list.middleofLinkedListM1()
    print("Middle element M1:", middle_node.data)
    print("Middle element M2:", my_list.middleofLinkedListM2()) 


    print("Middle Part: ", my_list.middlePart())
    print("Printing list elements:")
    my_list.printList()
Enter fullscreen mode Exit fullscreen mode

Top comments (0)