ধরুন আমাদের লিঙ্ক করা তালিকা আছে, আমাদেরও দুটি মান আছে i এবং j, আমাদের লিঙ্ক করা তালিকাটিকে i থেকে jth নোডে উল্টাতে হবে। এবং অবশেষে আপডেট করা তালিকা ফিরিয়ে দিন।
সুতরাং, যদি ইনপুট হয় [1,2,3,4,5,6,7,8,9] i =2 j =6, তাহলে আউটপুট হবে [1, 2, 7, 6, 5, 4 , 3, 8, 9,
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব:
- prev_head :=একটি লিঙ্কযুক্ত তালিকা নোড তৈরি করুন যার মান নাল এর মতো এবং যেটি নোডের দিকে নির্দেশ করে
- prev :=prev_head, curr :=নোড
- 0 থেকে i পর্যন্ত সমস্ত মানের মাধ্যমে পুনরাবৃত্তি করুন, করুন
- prev :=curr, curr :=curr এর পরবর্তী
- rev_before :=prev, rev_end :=curr
- 0 থেকে (j - i) পর্যন্ত সমস্ত মানের মাধ্যমে পুনরাবৃত্তি করুন, করুন
- tmp :=curr এর পরবর্তী
- curr এর পরের :=prev
- prev, curr :=curr, tmp
- rev_before এর পরের :=prev, rev_end.next :=curr
- prev_head এর পরের রিটার্ন
আরও ভালভাবে বোঝার জন্য আসুন নিম্নলিখিত বাস্তবায়ন দেখি:
উদাহরণ
ক্লাস লিস্টনোড:def __init__(self, data, next =None):self.val =data self.next =nextdef make_list(elements):head =ListNode(elements[0]) উপাদানের উপাদানের জন্য[1:] :ptr =head while ptr.next:ptr =ptr.next ptr.next =ListNode(element) রিটার্ন headdef print_list(head):ptr =head print('[', end ="") যখন ptr:print(ptr. val, end =", ") ptr =ptr.next print(']') ক্লাস সমাধান:def solve(self, node, i, j):prev_head =ListNode(None, node) prev, curr =prev_head, নোড এর জন্য _ পরিসরে(i):prev, curr =curr, curr.next rev_before, rev_end =prev, _ এর জন্য curr রেঞ্জ(j - i + 1):tmp =curr.next curr.next =আগের আগের, curr =curr , tmp rev_before.next, rev_end.next =prev, curr রিটার্ন prev_head.nextob =সমাধান()head =make_list([1,2,3,4,5,6,7,8,9])i =2j =6print_list (ob.solve(head, i, j))
ইনপুট
<প্রে>[1,2,3,4,5,6,7,8,9], 2, 6আউটপুট
[1, 2, 7, 6, 5, 4, 3, 8, 9, ]