Quick actions

cmd+k|ctrl+k

Navigation

Languages

Data Structures: Linked Lists

Snippet info

Language

Python

Visibility

public

Author

rakeshbhatia87

Created

2023-01-02T20:44:41.570188Z

Updated

2023-01-02T20:44:41.570188Z

# Implement a linked list
class Node:
    def __init__(self, value):
        self.value = value
        self.next = None
        
class LinkedList:
    def __init__(self, value):
        self.head = Node(value)
        self.tail = self.head
        self.length = 1
    
    def append(self, value):
        node = Node(value)
        self.tail.next = self.node
        self.tail = node
        self.length += 1
        return self.head
    
    def prepend(self, value):
        node = Node(value)
        node.next = self.head
        self.head = node
        self.length += 1
        return self.head
    
    def printList(self):
        array = []
        currentNode = self.head
        while currentNode:
            array.append(currentNode.value)
            currentNode = currentNode.next
        return array
    
    def insert(index, value):
        if index == 0:
            return self.prepend(value)
        elif index >= self.length:
            return self.append(value)
        node = Node(value)
        currentNode = self.head.next
        prevNode = self.head
        count = 1
        while currentNode:
            if index == count:
                prevNode.next = node
                node.next = currentNode
                self.length += 1
                break
            prevNode = currentNode
            currentNode = currentNode.next
            count += 1
        return self.printList()
    
    def remove(index):
        if index == 0:
            self.head = self.head.next
            self.head.prev = None
            self.length -= 1
            return self.printList()
        currentNode = self.head.next
        prevNode = self.head
        count = 1
        while currentNode:
            if index == count:
                prevNode.next = currentNode.next
                self.length -= 1
                break
            prevNode = currentNode
            currentNode = currentNode.next
            count += 1
        return self.printList()
    
    def reverse(self):
        currentNode = self.head
        prevNode = None
        self.tail = self.head
        while currentNode:
            temp = currentNode
            currentNode = currentNode.next
            temp.next = prevNode
            prevNode = temp
        self.head = temp
        return self.printList()

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

class DoublyLinkedList:
    def __init__(self, value):
        self.head = Node(value)
        self.tail = self.head
        self.length = 1
    
    def append(self, value):
        node = Node(value)
        self.tail.next = node
        node.prev = self.tail
        self.tail = node
        self.length += 1
        return self.head
    
    def prepend(self, value):
        node = Node(value)
        node.next = self.head
        node.prev = None
        self.head = node
        self.length += 1
        return self.head
    
    def printList(self):
        array = []
        currentNode = self.head
        while currentNode:
            array.append(currentNode.value)
            currentNode = currentNode.next
        return array
    
    def insert(index, value):
        if index == 0:
            return self.prepend(value)
        elif index >= self.length:
            return self.append(value)
        node = Node(value)
        currentNode = self.head.next
        prevNode = self.head
        count = 1
        while currentNode:
            if index == count:
                prevNode.next = node
                node.prev = prevNode
                node.next = currentNode
                currentNode.prev = node
                self.length += 1
                break
            prevNode = currentNode
            currentNode = currentNode.next
            count += 1
        return self.printList()
    
    def remove(index):
        if index == 0:
            self.head = self.head.next
            self.length -= 1
            return self.printList()
        currentNode = self.head.next
        prevNode = self.head
        count = 1
        while currentNode:
            if index == count:
                prevNode.next = currentNode.next
                currentNode.next.prev = prevNode
                self.length -= 1
                return self.printList()
            prevNode = currentNode
            currentNode = currentNode.next
            count += 1
        return self.printList()
INFO