Added python file to demerge large pdf to smaller ones
diff --git a/PDF/demerge_pdfs.py b/PDF/demerge_pdfs.py
new file mode 100644
index 0000000000..12fcf08142
--- /dev/null
+++ b/PDF/demerge_pdfs.py
@@ -0,0 +1,43 @@
+"""
+Python program to split large pdf(typically textbook) into small set of pdfs, maybe chapterwise
+to enhance the experience of reading and feasibility to study only specific parts from the large original textbook
+"""
+
+
+import PyPDF2
+path = input()
+merged_pdf = open(path, mode='rb')
+
+
+pdf = PyPDF2.PdfFileReader(merged_pdf)
+
+(u, ctr, x) = tuple([0]*3)
+for i in range(1, pdf.numPages+1):
+
+    if u >= pdf.numPages:
+        print("Successfully done!")
+        exit(0)
+    name = input("Enter the name of the pdf: ")
+    ctr = int(input(f"Enter the number of pages for {name}: "))
+    u += ctr
+    if u > pdf.numPages:
+        print('Limit exceeded! ')
+        break
+
+    base_path = '/Users/darpan/Desktop/{}.pdf'
+    path = base_path.format(name)
+    f = open(path, mode='wb')
+    pdf_writer = PyPDF2.PdfFileWriter()
+
+    for j in range(x, x+ctr):
+        page = pdf.getPage(j)
+        pdf_writer.addPage(page)
+
+    x += ctr
+
+    pdf_writer.write(f)
+    f.close()
+
+
+merged_pdf.close()
+print("Successfully done!")
diff --git a/Sorting Algorithims/quicksort_linkedlist.py b/Sorting Algorithims/quicksort_linkedlist.py
new file mode 100644
index 0000000000..97de82e2bc
--- /dev/null
+++ b/Sorting Algorithims/quicksort_linkedlist.py	
@@ -0,0 +1,76 @@
+"""
+Given a linked list with head pointer, 
+sort the linked list using quicksort technique without using any extra space
+Time complexity: O(NlogN), Space complexity: O(1)
+"""
+from __future__ import annotations
+
+
+class Node:
+    def __init__(self, data: int) -> None:
+        self.data = data
+        self.next = None
+
+
+class LinkedList:
+    def __init__(self):
+        self.head = None
+
+    # method to insert nodes at the start of linkedlist
+    def insert(self, new_data: int) -> None:
+        new_node = Node(new_data)
+        new_node.next = self.head
+        self.head = new_node
+
+    # method to print the linkedlist
+    def printLL(self) -> None:
+        temp = self.head
+        if temp == None:
+            return 'Linked List is empty'
+        while temp.next:
+            print(temp.data, '->', end='')
+            temp = temp.next
+        print(temp.data)
+        return
+
+# Partition algorithm with pivot as first element
+
+
+def partition(start, end):
+    if start == None or start.next == None:
+        return start
+    prev, curr = start, start.next
+    pivot = prev.data
+    while curr != end:
+        if curr.data < pivot:
+            prev = prev.next
+            temp = prev.data
+            prev.data = curr.data
+            curr.data = temp
+        curr = curr.next
+    temp = prev.data
+    prev.data = start.data
+    start.data = temp
+    return prev
+
+
+# recursive quicksort for function calls
+def quicksort_LL(start, end):
+    if start != end:
+        pos = partition(start, end)
+        quicksort_LL(start, pos)
+        quicksort_LL(pos.next, end)
+        return
+
+
+if __name__ == "__main__":
+    ll = LinkedList()
+    print("Enter the space seperated values of numbers to be inserted in linkedlist prompted below:")
+    arr = list(map(int, input().split()))
+    for num in arr:
+        ll.insert(num)
+    print("Linkedlist before sorting:")
+    ll.printLL()
+    quicksort_LL(ll.head, None)
+    print('Linkedlist after sorting: ')
+    ll.printLL()

You can now create small pdfs of required size from a large pdf(like textbook of 1000 pages) within few clicks.