Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9c46187

Browse files
1019 Next Greater Node In Linked List.py
1 parent56f5b02 commit9c46187

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#!/usr/bin/python3
2+
"""
3+
We are given a linked list with head as the first node. Let's number the nodes
4+
in the list: node_1, node_2, node_3, ... etc.
5+
6+
Each node may have a next larger value: for node_i, next_larger(node_i) is the
7+
node_j.val such that j > i, node_j.val > node_i.val, and j is the smallest
8+
possible choice. If such a j does not exist, the next larger value is 0.
9+
10+
Return an array of integers answer, where answer[i] = next_larger(node_{i+1}).
11+
12+
Note that in the example inputs (not outputs) below, arrays such as [2,1,5]
13+
represent the serialization of a linked list with a head node value of 2, second
14+
node value of 1, and third node value of 5.
15+
16+
Example 1:
17+
Input: [2,1,5]
18+
Output: [5,5,0]
19+
20+
Example 2:
21+
Input: [2,7,4,3,5]
22+
Output: [7,0,5,5,0]
23+
24+
Example 3:
25+
Input: [1,7,5,1,9,2,5,1]
26+
Output: [7,9,9,9,0,5,0,0]
27+
28+
Note:
29+
1 <= node.val <= 10^9 for each node in the linked list.
30+
The given list has length in the range [0, 10000].
31+
"""
32+
33+
# Definition for singly-linked list.
34+
classListNode:
35+
def__init__(self,x):
36+
self.val=x
37+
self.next=None
38+
39+
40+
fromtypingimportList
41+
42+
43+
classSolution:
44+
defnextLargerNodes(self,head:ListNode)->List[int]:
45+
"""
46+
If input is an array, use stack from right to left. Maintain a decreasing stack
47+
48+
How to make it one-pass? Maintain a stack from left to right for the element
49+
waiting for the next larger node
50+
"""
51+
ret= []
52+
stk= []# [[index, value]]
53+
i=0
54+
cur=head
55+
whilecur:
56+
whilestkandstk[-1][1]<cur.val:
57+
idx,_=stk.pop()
58+
ret[idx]=cur.val
59+
60+
stk.append([i,cur.val])
61+
ret.append(0)
62+
cur=cur.next
63+
i+=1
64+
65+
returnret

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp