1 class Solution(object):
 2     def nextLargerNodes(self, head: ListNode) -> 'List[int]':
 3         n = 0
 4         temp = head
 5         while temp != None:
 6             n += 1
 7             temp = temp.next
 8         R = [0] * n
 9         Stack = list()
10         index = 0
11         while head != None:
12             #print(head.val)
13             cur = head.val
14             if len(Stack) == 0:
15                 Stack.append((index,cur))
16             else:
17                 for i in range(len(Stack)-1,-1,-1):
18                     peeknode = Stack[-1]
19                     peekindex = peeknode[0]
20                     peekval = peeknode[1]
21                     if peekval < cur:
22                         R[peekindex] = cur
23                         Stack.remove((peekindex,peekval))
24                     else:
25                         break
26                 Stack.append((index,cur))
27             head = head.next
28             index += 1
29 
30         return R

使用一个栈结构用来记录数据,遍历整个链表,用当前节点的值“依次”与栈内各数字比较。

如果当前值>栈顶值,则栈顶元素进行“标记”,并出栈。一直到栈为空或者当前值<栈内值时,将当前值,入栈。

最后留在栈中的,都“标记”为0。这一步在初始化时就可以完成,因此最后就不用再处理了。

posted on 2019-03-31 19:37  Sempron2800+  阅读(214)  评论(0编辑  收藏  举报