मान लीजिए कि हमारे पास एक लिंक्ड सूची है। हमें सूची के अंत से Nth नोड को हटाना होगा, फिर उसका सिर वापस करना होगा। तो अगर सूची [1, 2, 3, 4, 5, 6] और n =3 जैसी है, तो लौटाई गई सूची [1, 2, 3, 5, 6] होगी।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- यदि सिर के बाद कोई नोड नहीं है, तो कोई नहीं लौटाएं
- सामने:=सिर, पीछे:=सिर, काउंटर:=0 और फव्वारा:=झूठा
- काउंटर करते समय <=n
- यदि सामने मौजूद नहीं है, तो ध्वज को सत्य के रूप में सेट करें, और लूप से बाहर आएं
- सामने :=सामने के आगे, और काउंटर को 1 से बढ़ाएं
- जबकि सामने मौजूद है
- सामने:=सामने के बगल में
- पीछे :=आगे पीछे
- अगर झंडा झूठा है, तो
- अस्थायी:=पीछे की ओर
- पीछे के आगे :=अस्थायी के आगे
- अगले तापमान :=कोई नहीं
- अन्यथा सिर :=सिर के बगल में
- रिटर्न हेड
उदाहरण (पायथन)
एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -
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]