给定一个整数的单向链表,我需要将最长的递增子序列作为新的链表返回。 例如,给定的列表是:1->5->4->3->6->8->12->10 新的应该是:3->6->8->12。
我试图遍历列表并比较每个节点
if (n.data < n.next.data)
newList.add(n);
当列表处于最大长度时如何存储节点的和计数然后返回它? 提前谢谢:)
答案 0 :(得分:1)
您应该尝试更多,以了解如何解决问题。 这可以通过纸上/思想设计您将如何解决问题来完成。
maxSublist
,并且currentSublist
。当您可能添加当前节点时,您应该将其与前一个节点(currentSubList 的最后一个元素)进行比较。由于获取单个链表的最后一个元素的开销很大,因此处理后我记得该节点为 priorNode
。
在伪代码中:
List<Integer> maxSublist = new SingleLinkedList<>(); // Empty list.
List<Integer> currentSublist = new SingleLinkedList<>();
Node priorNode = null;
for (Node node = list.head(); node != null; node = node.next) {
if (priorNode == null || node.data > priorNode.data) {
currentSublist.add(node);
} else {
...
}
if (currentSublist.size() > maxSublist.size()) {
maxSublist = currentSublist;
}
priorNode = node;
}
return maxSublist;
顺便说一下,以上并不是唯一的解决方案。您可能需要在填写 ...
后更改代码。
对于下一个任务,请尝试以这种方式自己找到解决方案。意识到你需要什么:当前的子列表和到那时的最大子列表。 这是一种难题,当完全自己解决时,会带来更多乐趣。