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。这一步在初始化时就可以完成,因此最后就不用再处理了。