在Python中的排序双链表中查找与给定产品的对
假设我们有一个排序的双向链接的唯一正数列表;我们必须在双链表中找到对,它们的乘积与给定值x相同。我们必须记住,这将在不占用任何额外空间的情况下解决。
因此,如果输入像L=1⇔2⇔4⇔5⇔6⇔8⇔9并且x=8,则输出将是(1,8),(2,4)
为了解决这个问题,我们将遵循以下步骤-
curr:=头,nxt:=头
当nxt.next不为None不为零时,执行
nxt:=nxt.next
发现:=错误
当curr和nxt不为null并且curr和nxt不同并且nxt.next不是curr时
如果(curr.data*nxt.data)<x,则
除此以外,
curr:=curr.next
nxt:=nxt.prev
找到:=真
显示一对curr.data,nxt.data
curr:=curr.next
nxt:=nxt.prev
如果(curr.data*nxt.data)与x相同,则
除此以外,
如果发现为假,则
显示“未找到”
示例
让我们看下面的实现以更好地理解-
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 )