Doubly-linked list/Traversal: Difference between revisions
m (→{{header|JavaScript}}: xref corrections) |
(add Ruby) |
||
Line 33: | Line 33: | ||
Uses the <code>print()</code> function from [[Rhino]] or [[SpiderMonkey]]. |
Uses the <code>print()</code> function from [[Rhino]] or [[SpiderMonkey]]. |
||
=={{header|Ruby}}== |
|||
<lang ruby>class DListNode |
|||
def get_tail |
|||
tail = nil |
|||
self.each {|node| tail = node} |
|||
tail |
|||
end |
|||
def each_previous(&b) |
|||
yield self |
|||
self.prev.each_previous(&b) if self.prev |
|||
end |
|||
end |
|||
head = DListNode.from_array([:a, :b, :c]) |
|||
head.each {|node| p node.value} |
|||
head.get_tail.each_previous {|node| p node.value}</lang> |
Revision as of 19:21, 9 October 2009
You are encouraged to solve this task according to the task description, using any language you may know.
Traverse from the beginning of a doubly-linked list to the end, and from the end to the beginning.
JavaScript
See Doubly-Linked List (element)#JavaScript. The traverse()
and print()
functions have been inherited from Singly-Linked List (traversal)#JavaScript.
<lang javascript>DoublyLinkedList.prototype.getTail = function() {
var tail; this.traverse(function(node){tail = node;}); return tail;
} DoublyLinkedList.prototype.traverseBackward = function(func) {
func(this); if (this.prev() != null) this.prev().traverseBackward(func);
} DoublyLinkedList.prototype.printBackward = function() {
this.traverseBackward( function(node) {print(node.value())} );
}
var head = createDoublyLinkedListFromArray([10,20,30,40]); head.print(); head.getTail().printBackward();</lang>
outputs:
10 20 30 40 40 30 20 10
Uses the print()
function from Rhino or SpiderMonkey.
Ruby
<lang ruby>class DListNode
def get_tail tail = nil self.each {|node| tail = node} tail end
def each_previous(&b) yield self self.prev.each_previous(&b) if self.prev end
end
head = DListNode.from_array([:a, :b, :c]) head.each {|node| p node.value} head.get_tail.each_previous {|node| p node.value}</lang>