ABOUT ME

-

  • Linked List
    개발 지식/알고리즘 2020. 6. 29. 20:07

    Ruby로 작성되었습니다.

     

    - Node

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    # frozen_string_literal: true
     
    class Node
      attr_accessor :prev, :value, :next
      def initialize(left, value, right)
        @prev = left
        @value = value
        @next = right
      end
    end
     
    node1 = Node.new(nil1nil)
    node2 = Node.new(node1, 2nil)
    node2.prev.next = node2
    node3 = Node.new(node2, 3nil)
    node3.prev.next = node3
     
    puts node1.value
    puts node2.prev.value
    puts node2.value
    puts node3.prev.value
    puts node2.next.value
     
    cs

     

    - Linked List

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    # frozen_string_literal: true
     
    class Node
      attr_accessor :prev, :value, :next
      def initialize(left, value, right)
        @prev = left
        @value = value
        @next = right
      end
    end
     
    class LinkedList
      def initialize(value)
        @head = Node.new(nil, value, nil)
      end
     
      def insert_node(value)
        cur_node = @head
        if @head.nil?
          @head = Node.new(nil, value, nil)
        else
          cur_node = cur_node.next until cur_node.next.nil?
          cur_node.next = Node.new(cur_node, value, nil)
        end
      end
     
      def delete_node(value)
        cur_node = @head
        if cur_node.value == value
          if cur_node.next.nil?
            @head = nil
          else
            @head = cur_node.next
            @head.prev = nil
          end
        else
          until cur_node.next.nil?
            cur_node = cur_node.next
            next unless cur_node.value == value
     
            cur_node.prev.next = cur_node.next
            cur_node.next.prev = cur_node.prev unless cur_node.next.nil?
          end
        end
      end
     
      def read_nodes
        cur_node = @head
        until cur_node.nil?
          print "#{cur_node.value},"
          cur_node = cur_node.next
        end
        puts
      end
    end
     
    list = LinkedList.new(0)
    list.insert_node(1)
    list.insert_node(2)
    list.insert_node(1)
    list.insert_node(3)
    print 'result: '
    list.read_nodes
     
    list.delete_node(1)
    print 'result: '
    list.read_nodes
     
    list.delete_node(0)
    print 'result: '
    list.read_nodes
     
    list.delete_node(3)
    print 'result: '
    list.read_nodes
     
    list.delete_node(2)
    print 'last result: '
    list.read_nodes
     
    list.insert_node(3)
    print 'result: '
    list.read_nodes
    cs

    '개발 지식 > 알고리즘' 카테고리의 다른 글

    스택, 큐  (0) 2020.06.30
    메모리 관리  (0) 2020.06.30
    포인터, 매개변수, CBV, CBR  (0) 2020.06.29
    배열 접근  (0) 2020.06.29
    infix, postfix  (0) 2020.06.29

    댓글

Designed by Tistory.