고유한 양수의 정렬된 이중 연결 목록이 있다고 가정합니다. 주어진 값 x와 곱이 같은 이중 연결 목록에서 쌍을 찾아야 합니다. 이 문제는 추가 공간을 차지하지 않고 해결된다는 점을 명심해야 합니다.
따라서 입력이 L =1 ⇔ 2 ⇔ 4 ⇔ 5 ⇔ 6 ⇔ 8 ⇔ 9 및 x =8과 같으면 출력은 (1, 8), (2, 4)
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
curr :=머리, nxt :=머리
-
nxt.next가 None이 아닌 동안 0이 아닌 경우 수행
-
nxt :=nxt.next
-
-
발견됨 :=거짓
-
curr과 nxt가 null이 아니고 curr과 nxt가 다르며 nxt.next가 curr이 아닌 동안 do
-
(curr.data * nxt.data)가 x와 같으면
-
찾았습니다 :=참
-
curr.data, nxt.data 쌍 표시
-
curr :=curr.next
-
nxt :=nxt.prev
-
-
그렇지 않으면
-
if (curr.data * nxt.data)
-
curr :=curr.next
-
-
그렇지 않으면
-
nxt :=nxt.prev
-
-
-
-
발견된 것이 False이면
-
"찾을 수 없음" 표시
-
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
class ListNode:def __init__(self, data):self.data =data self.prev =None self.next =Nonedef 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 headdef get_pair_prod(head, x):curr =head nxt =head while (nxt.next !=없음):nxt =nxt.next 발견 =False 동안 (curr !=없음 및 nxt !=없음 및 curr !=nxt 및 nxt.next !=curr) :if ((curr.data * nxt .data) ==x) :find =True print("(", curr.data, ", ", nxt.data, ")") curr =curr.next nxt =nxt.prev else :if ((curr.data) data * nxt.data)입력
<예비>헤드 =없음헤드 =인서트(헤드, 9)헤드 =인서트(헤드, 8)헤드 =인서트(헤드, 6)헤드 =인서트(헤드, 5)헤드 =인서트(헤드, 4)헤드 =인서트(헤드 , 2)머리 =삽입(머리, 1)x =8
출력
( 1 , 8 )( 2 , 4 )