मान लीजिए हमें एक लिंक्ड लिस्ट दी गई है जिसका स्टार्ट नोड "head" है, और दो पूर्णांक m और n हैं। हमें लिस्ट को ट्रैवर्स करना है और कुछ नोड्स डिलीट करने हैं जैसे कि पहले m नोड्स लिस्ट में रखे जाएं और पहले m नोड्स के बाद अगले n नोड्स डिलीट कर दिए जाएं। हम इसे तब तक करते हैं जब तक लिंक्ड लिस्ट का अंत न आ जाए। हम हेड नोड से शुरू करते हैं, और मॉडिफाइड लिंक्ड लिस्ट वापस की जानी है।
लिंक्ड लिस्ट की संरचना इस प्रकार दी गई है:
Node
value:
next: <अगले नोड का पॉइंटर>
उदाहरण के लिए, यदि इनपुट elements = [1, 2, 3, 4, 5, 6, 7, 8], m = 3, n = 1 है, तो आउटपुट [1, 2, 3, 5, 6, 7] होगा।
समाधान के चरण
prev := headcurr := headq := 0p := 0- जब तक
currनल नहीं है: q := q + 1- यदि
q == m, तो: iको 0 सेnतक लूप चलाएं- यदि
curr.nextनल नहीं है, तोcurr := curr.next prev.next := curr.nextq := 0prev := prev.nextcurr := curr.nextheadवापस करें
उदाहरण (पायथन)
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
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(']')
def solve(head, m, n):
prev = curr = head
q = 0
p = 0
while curr:
q += 1
if q == m:
for i in range(n):
if curr.next is not None:
curr = curr.next
prev.next = curr.next
q = 0
prev = prev.next
curr = curr.next
return head
head = ListNode()
elements = [1, 2, 3, 4, 5, 6, 7, 8]
head = make_list(elements)
res = solve(head, 3, 1)
print_list(res)
इनपुट
[1, 2, 3, 4, 5, 6, 7, 8], 3, 1
आउटपुट
[1, 2, 3, 5, 6, 7,]