ধরুন আমাদের একটি লিঙ্ক করা তালিকা আছে। আমাদের তালিকার শেষ থেকে Nth নোডটি সরাতে হবে, তারপর তার মাথাটি ফিরিয়ে দিতে হবে। তাই যদি তালিকাটি [1, 2, 3, 4, 5, 6] এবং n =3 এর মত হয়, তাহলে ফিরে আসা তালিকাটি হবে [1, 2, 3, 5, 6]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- যদি হেডের পরে কোন নোড না থাকে, তাহলে None ফেরত দিন
- সামনে :=মাথা, পিছনে :=মাথা, কাউন্টার :=0 এবং ফাউন্ট :=মিথ্যা
- যখন কাউন্টার <=n
- যদি সামনে উপস্থিত না থাকে, তাহলে পতাকাটিকে সত্য হিসাবে সেট করুন এবং লুপ থেকে বেরিয়ে আসুন
- সামনে :=সামনের পাশে, এবং কাউন্টার 1 দ্বারা বাড়ান
- যখন সামনে উপস্থিত থাকে
- সামনে :=সামনের পাশে
- ব্যাক :=পিছনের পাশে
- যদি পতাকা মিথ্যা হয়, তাহলে
- temp :=পিছনের পাশে
- পিছের পাশে :=টেম্পের পরের দিকে
- টেম্পের পরের :=কোনোটিই নয়
- অন্যথায় মাথা :=মাথার পাশে
- রিটার্ন হেড
উদাহরণ(পাইথন)
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
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(object):
def removeNthFromEnd(self, head, n):
if not head.next:
return None
front=head
back = head
counter = 0
flag = False
while counter<=n:
if(not front):
flag = True
break
front = front.next
counter+=1
while front:
front = front.next
back = back.next
if not flag:
temp = back.next
back.next = temp.next
temp.next = None
else:
head = head.next
return head
head = make_list([1,2,3,4,5,6])
ob1 = Solution()
print_list(ob1.removeNthFromEnd(head, 3)) ইনপুট
[1,2,3,4,5,6] 3
আউটপুট
[1,2,3,5,6]