मान लीजिए कि हमारे पास अद्वितीय धनात्मक संख्याओं की एक क्रमबद्ध डबल लिंक्ड सूची है; हमें डबल लिंक्ड सूची में ऐसे जोड़े खोजने होंगे जिनका उत्पाद दिए गए मान x के समान हो। हमें यह ध्यान में रखना होगा कि, इसे बिना किसी अतिरिक्त स्थान की खपत के हल किया जाएगा।
इसलिए, यदि इनपुट L =1 ⇔ 2 ⇔ 4 ⇔ 5 ⇔ 6 ⇔ 8 ⇔ 9 और x =8 जैसा है, तो आउटपुट (1, 8), (2, 4)
होगा।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
वक्र:=सिर, अगला:=सिर
-
जबकि nxt.next नहीं है कोई भी गैर-शून्य नहीं है, करें
-
अगला:=nxt.next
-
-
पाया :=असत्य
-
जबकि curr और nxt शून्य नहीं हैं और curr और nxt अलग हैं और nxt.next curr नहीं है, करें
-
अगर (curr.data * nxt.data) x के समान है, तो
-
पाया :=सच
-
एक जोड़ी प्रदर्शित करें curr.data, nxt.data
-
curr :=curr.next
-
अगला:=nxt.prev
-
-
अन्यथा,
-
अगर (curr.data * nxt.data)
-
curr :=curr.next
-
-
अन्यथा,
-
अगला:=nxt.prev
-
-
-
-
अगर मिला गलत है, तो
-
प्रदर्शन "नहीं मिला"
-
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
class ListNode:
def __init__(self, data):
self.data = data
self.prev = None
self.next = None
def insert(head, data):
node = ListNode(0)
node.data = data
node.next = node.prev = None
if (head == None):
(head) = node
else :
node.next = head
head.prev = node
head = node
return head
def get_pair_prod(head, x):
curr = head
nxt = head
while (nxt.next != None):
nxt = nxt.next
found = False
while (curr != None and nxt != None and curr != nxt and nxt.next != curr) :
if ((curr.data * nxt.data) == x) :
found = True
print("(", curr.data, ", ", nxt.data, ")")
curr = curr.next
nxt = nxt.prev
else :
if ((curr.data * nxt.data) < x):
curr = curr.next
else:
nxt = nxt.prev
if (found == False):
print( "Not found")
head = None
head = insert(head, 9)
head = insert(head, 8)
head = insert(head, 6)
head = insert(head, 5)
head = insert(head, 4)
head = insert(head, 2)
head = insert(head, 1)
x = 8
get_pair_prod(head, x) इनपुट
head = None head = insert(head, 9) head = insert(head, 8) head = insert(head, 6) head = insert(head, 5) head = insert(head, 4) head = insert(head, 2) head = insert(head, 1) x = 8
आउटपुट
( 1 , 8 ) ( 2 , 4 )