মূল কনটেন্টে যান
🧩
লোকাল DSA
প্যাটার্নটপিক 3 · Linked Lists

3.3 In-Place Reversal

চিনবেন কীভাবে
"reverse list", "reverse in k-group", "reorder" — prev/cur/next তিন pointer-এর নাচ, O(1) space
Demo · approach · কোড — আগে নিজে চেষ্টা, আটকালে খুলুন

Demo: Reverse Nodes in k-GroupLC 25 (Hard — Meta High)

Statement (Demo): linked list-এর head ও integer k দেওয়া — প্রতি kটা node-এর group reverse করুন। শেষে k-এর কম node বাকি থাকলে সেগুলো অপরিবর্তিত রাখুন। Modified list-এর head return করুন। উদাহরণ: head=[1,2,3,4,5], k=2[2,1,4,3,5] | ⚡ n ≤ 5000, 1 ≤ k ≤ n

Approach: আগে গুনে দেখুন k-টা নোড আছে কি না — না থাকলে ওই অংশ অপরিবর্তিত। থাকলে recursion দিয়ে পরের অংশ আগে সমাধান করুন, তারপর বর্তমান k-টা নোড standard reversal-এ উল্টে সেই ফলের সাথে জুড়ে দিন।

function reverseKGroup(head, k) {
  let count = 0,
    node = head;
  while (node && count < k) {
    node = node.next;
    count++;
  }
  if (count < k) return head; // k-এর কম বাকি → যেমন আছে
  let prev = reverseKGroup(node, k); // পরের গ্রুপ আগে সমাধান
  let cur = head;
  while (count--) {
    const next = cur.next;
    cur.next = prev;
    prev = cur;
    cur = next;
  }
  return prev;
}

Complexity: Time O(n), Space O(n/k) recursion (iterative করলে O(1))

প্রবলেম

  • (টেমপ্লেট — চোখ বন্ধ করে লিখতে পারা চাই)

    Statement: singly linked list-এর head দেওয়া — list-টি reverse করুন এবং reversed list-এর head return করুন।
    উদাহরণ: [1,2,3,4,5][5,4,3,2,1] | ⚡ n ≤ 5000

    নোট · ফাঁকা
  • Reorder ListLC 143
    (middle + reverse + merge — তিন প্যাটার্নের কম্বো)

    Statement: singly linked list L0 → L1 → … → Ln-1 → Ln দেওয়া — in-place reorder করুন: L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → ...
    উদাহরণ: [1,2,3,4][1,4,2,3] | ⚡ n ≤ 5×10⁴

    নোট · ফাঁকা