Tạo một thư viện mã triển khai cấu trúc dữ liệu danh sách được liên kết.
Đây là một ví dụ về thư viện mã triển khai cấu trúc dữ liệu danh sách được liên kết bằng ngôn ngữ Python:

class Node:
    def __init__(self, data=None):
        self.data = data 
        self.next = None  # pointer to next node
        self.prev = None  # pointer to previous node, for doubly linked list

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            return
        curr_node = self.head
        while curr_node.next:
            curr_node = curr_node.next
        curr_node.next = new_node
        new_node.prev = curr_node

    def prepend(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            return
        self.head.prev = new_node
        new_node.next = self.head
        self.head = new_node

    def insert_after_node(self, prev_node, data):
        if not prev_node:
            print("Previous node is not in the list")
            return
        new_node = Node(data)
        new_node.next = prev_node.next
        prev_node.next = new_node
        new_node.prev = prev_node
        if new_node.next:
            new_node.next.prev = new_node

    def delete_node(self, key):
        if self.head is None:
            print("The list is empty")
            return
        if self.head.data == key:
            if self.head.next:
                self.head.next.prev = None
            self.head = self.head.next
            return
        curr_node = self.head
        while curr_node and curr_node.data != key:
            curr_node = curr_node.next
        if curr_node is None:
            print("The key is not in the list")
            return
        if curr_node.next:
            curr_node.next.prev = curr_node.prev
        curr_node.prev.next = curr_node.next

    def reverse(self):
        curr_node = self.head
        prev_node = None
        while curr_node:
            prev_node = curr_node.prev
            curr_node.prev = curr_node.next
            curr_node.next = prev_node
            curr_node = curr_node.prev
        if prev_node:
            self.head = prev_node.prev

    def print_list(self):
        curr_node = self.head
        while curr_node:
            print(curr_node.data)
            curr_node = curr_node.next

# example usage
l = LinkedList()
l.append(1)
l.append(2)
l.append(3)
l.prepend(4)
l.insert_after_node(l.head.next, 5)
l.delete_node(3)
l.reverse()
l.print_list()<|end_of_text|>