题目:给定一条链表,获取链表中每个节点后面第一个大于该节点值的节点的值,如果某个节点后面所有节点的值都不大于该节点的值,即没有符合上述条件的节点的值,则用 0 填充。图示给出一个链表进行示例。
工具/原料
1
Eclipse
2
JDK1.8
方法/步骤
1
编写一个代表链表节点的静态内部类,通过该类对象可以构建一条单向链表结构,图示代码。
2
实现算法,获取所有节点后第一个大于该节点值的节点的值,算法思想为:1. 获取链表长度,即最终返回的数组长度。2. 声明一个栈,用于存储链表节点的索引,对于某个链表节点 n,处理栈顶所有值小于该节点的值的节点,节点n的值就是栈顶这些节点需要获取的值,处理完毕后,将节点n的索引入栈。图示获取链表长度的函数。
3
实现算法,通过栈这种数据结构,通过遍历一遍链表,获取所有节点后面第一个大于该节点值的节点的值。
4
编写一个函数,可以将一条单向无环链表转换为一个字符串,便于在控制台打印该链表,辅助本地测试。
5
编写并运行测试方法,观察控制台输出,符合预期,本地测试通过。
6
平台提交算法,测试通过。
注意事项
1
Java 类库提供 Stack 这种栈数据结构,其 peak 方法返回但不删除栈顶元素
2
Stack 的 pop 方法会返回并在栈中删除栈顶元素