কম্পিউটার টিউটোরিয়াল

পাইথনে লিংকড লিস্টের নোডগুলকে k ভ্যালু অনুযায়ী সাজানোর প্রোগ্রাম


মান লক্ষ্য করুন আমাদের কাছে একটি সিংগলি লিংকড লিস্ট এবং একটি মান k আছে। আমাদের কাজ হল নোডগুলকে এমনভাবে সাজানো যাতে k-এর চেয়ে ছোট মানের নোডগুলো আগে আসে, তারপর k-এর সমান মানের নোডগুলো, এবং সবশেষে বাকি নোডগুলো। শর্ত হল নোডগুলোর النسبিক ক্রম (relative ordering) অপরিবর্তিত থাকবে।

উদাহরণস্বরূপ, যদি ইনপুট হয় L = [4, 3, 6, 6, 6, 10, 8] এবং k = 6, তবে আউটপুট হবে [4, 3, 6, 6, 6, 10, 8, ]।

সমাধানের ধাপসমূহ:
  • less_head := ListNode(0), less := less_head
  • equal_head := ListNode(0), equal := equal_head
  • greater_head := ListNode(0), greater := greater_head
  • cur := node
  • cur নাল না হওয়া পর্যন্ত লুপ চালান:
    • যদি cur.val < k হয়, তবে less.next := ListNode(cur.val), less := less.next
    • অন্যথায় যদি cur.val > k হয়, তবে greater.next := ListNode(cur.val), greater := greater.next
    • অন্যথায়, equal.next := ListNode(cur.val), equal := equal.next
    • cur := cur.next
  • less.next := equal_head.next
  • equal.next := greater_head.next
  • less_head.next রিটার্ন করুন।
উদাহরণ কোড
class ListNode:
    def __init__(self, data, next=None):
        self.val = data
        self.next = next

def make_list(elements):
    head = ListNode(elements[0])
    for element in elements[1:]:
        ptr = head
        while ptr.next:
            ptr = ptr.next
        ptr.next = ListNode(element)
    return head

def print_list(head):
    ptr = head
    print('[', end="")
    while ptr:
        print(ptr.val, end=", ")
        ptr = ptr.next
    print(']')

class Solution:
    def solve(self, node, k):
        less_head = less = ListNode(0)
        equal_head = equal = ListNode(0)
        greater_head = greater = ListNode(0)
        cur = node
        while cur:
            if cur.val < k:
                less.next = ListNode(cur.val)
                less = less.next
            elif cur.val > k:
                greater.next = ListNode(cur.val)
                greater = greater.next
            else:
                equal.next = ListNode(cur.val)
                equal = equal.next
            cur = cur.next
        less.next = equal_head.next
        equal.next = greater_head.next
        return less_head.next

ob = Solution()
L = make_list([4, 3, 6, 6, 6, 10, 8])
k = 6
print_list(ob.solve(L, k))
ইনপুট
[4, 3, 6, 6, 6, 10, 8], 6
আউটপুট
[4, 3, 6, 6, 6, 10, 8, ]
  1. সি প্রোগ্রাম: সিংলি লিংকড লিস্টের নোডগুলোর যোগফল

  2. পাইথনে লিংকড লিস্টে নোড সোয়াপ করার প্রোগ্রাম

  3. Python প্রোগ্রাম: প্রিফিক্স (Prefix) লিস্ট অনুযায়ী স্ট্রিং প্রিন্ট করা

  4. পাইথনে লিংকড লিস্ট থেকে m নোডের পর n নোড ডিলিট করার প্রোগ্রাম