Last active
August 29, 2015 14:04
-
-
Save rajeevkannav/47f7ab1aeba41bd011b2 to your computer and use it in GitHub Desktop.
DoubleLinkedListRuby
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class Node | |
| attr_accessor :prev_node, :next_node | |
| def initialize(data) | |
| @data = data | |
| end | |
| def has_next?() | |
| @next_node ? true : false | |
| end | |
| def has_prev?() | |
| @prev_node ? true : false | |
| end | |
| def data | |
| return @data | |
| end | |
| def print() | |
| puts @data.to_s | |
| end | |
| end | |
| class DoublyLinkedList | |
| def initialize(node) | |
| @root_node = node | |
| end | |
| def last | |
| pointer = @root_node | |
| pointer = pointer.next_node while pointer.has_next? | |
| pointer | |
| end | |
| def insert_tail(node) | |
| last.next_node = node | |
| node.prev_node = last | |
| end | |
| def first | |
| pointer = @root_node | |
| while pointer.has_prev? | |
| pointer = pointer.prev_node | |
| end | |
| pointer | |
| end | |
| def insert_head(node) | |
| node.next_node = first | |
| node.prev_node = nil | |
| @root_node = node | |
| end | |
| def delete(value) | |
| pointer = @root_node | |
| if pointer.data == value | |
| @root_node = @root_node.next_node | |
| @root_node.prev_node = nil | |
| pointer = nil | |
| else | |
| while pointer.has_next? | |
| pointer = pointer.next_node | |
| if pointer.data == value | |
| pointer.prev_node.next_node = pointer.next_node | |
| pointer.next_node.prev_node = pointer.prev_node | |
| return | |
| end | |
| end | |
| end | |
| end | |
| def print() | |
| pointer = @root_node | |
| while pointer != nil | |
| pointer.print | |
| pointer = pointer.next_node | |
| end | |
| end | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment