我正在学习算法和数据结构的入门课程。教师使用的语言是Python;我将代码示例转换为JavaScript。目前为止,一切都很顺利。
我正在处理链表。教师使用Python的__repr__()
方法来测试代码。经过数天的尝试和错误,我有了一个可行的JS解决方案,但它与Python代码并不完全相同。我想知道是否有更好的实现JS代码的方法,我提供了JS代码和Python代码。
Python
# class LinkedList and its methods are presumed to exist
def __repr__(self):
nodes = []
current = self.head
while current:
if current is self.head:
nodes.append("[Head: %s]" % current.data)
elif current.next_node is None:
nodes.append("[Tail: %s]" % current.data)
else
nodes.append("[%s]" % current.data)
current = current.next_node
return '-> '.join(nodes)
# running script
>>> l = LinkedList()
>>> l.add(1)
>>> l.add(2)
>>> l.add(3)
>>> l
[Head: 3]-> [2]-> [Tail: 1] # output
>>>
JS
// class LinkedList and its methods are presumed to exist
repr () {
let nodes = "";
let current = this.head;
while (current) {
if (current === this.head) {
nodes = `Head: ${current.data}-> `;
} else if (current.nextNode === null) {
nodes += `Tail: ${current.data}`;
} else {
nodes += `${current.data}-> `;
}
current = current.nextNode;
}
return nodes;
// running the script
let l = LinkedList();
l.add(1);
l.add(2);
l.add(3);
let result = l.repr();
console.log(result); // Head: 3-> 2-> Tail: 1
再次说明,这两个代码片段只在完整的链表算法中才能运行,但它们确实有效。
我尝试过使用JS的toString()、append()和appendChild()方法,但是我很难理解如何最好地使用它们,特别是后两个方法修改了DOM。我相信有一种更好的方式来实现JS等价于Python的__repr__()方法;我想知道如何实现它。
const
和let
),并且nodes
应该初始化为空字符串,而不是数组,但我没有看到任何值得改进的结构性改进。 - CertainPerformance