링크드 리스트 (Linked List) 직접 구현하기 (1)

Kyu·2021년 1월 11일
0
public class LinkedList {
    private Node head;
    private Node tail;
    private int size = 0;
	private class Node {
     	  private Object data;
        private Node next;

        public Node(Object input) {
          this.data = input;
       	  this.next = null;
        }

      	 public String toString() {
         	  return String.valueOf(this.data);
        }
    }
   public void addFirst(Object input) {
      Node newNode = new Node(input);
      newNode.next = head;
      head = newNode;
        size++;
        if (head.next == null) {
            tail = head;
        }
    }
}
  1. input에 값이 들어온다.
  2. new Node(input)이 만들어진다.
  3. data는 input 값을 가진다.
  4. next는 null 값을 가진다.
  5. head는 null 값이기 때문에 newNode.next는 null 값이다.
  6. newNode의 정보를 head에 저장한다. -> headnewNode를 가리킨다.
  7. size를 1증가 시킨다.
  8. 만약에 next값이 null이면, 즉 노드가 1개밖에 없다면, tailhead를 저장한다.

만약에 addFirst 메소드를 이용해서 노드가 한개 더 만들어지는 상황이라고 생각하자. new Node()를 통해 새로운 Node가 만들어졌다. 그리고 새 노드인 newNode.nexthead 값을 저장하면서, 즉 이전 노드를 가리키게 된다. 그 다음, head에 새로 만들어진 newNode를 저장하면서 head는 새로 만들어진 노드를 가리키는 꼴이 된다.

 public void addLast(Object input) {
        Node newNode = new Node(input);
        if (size == 0) {
            addFirst(input);
        } else {
            tail.next = newNode;
            tail = newNode;
            size++;
        }
    }
  1. input에 값이 들어온다
  2. new Node(input)이 만들어진다
  3. 만약에 size가 0이면, 즉 노드가 없다면, addFirst()로 노드를 넣어줘도 무방하기 때문에 그렇게 한다.
  4. 그게 아니라면, 즉 노드가 있다면, tail은 만들어져있기 때문에 tail을 사용할 수 있게 되는데 이 때, 새로 만들어진 newNodetail.next에 저장한다. ~에 저장한다고 말하긴 했지만 tail.nextnewNode를 가리킨다고 하는 말이 맞을 것이다. 그런 다음에, newNodetail에 저장하면서 tailnewNode를 가리키게 된다.

내가 적고도 뭔소린지 모르겠네 왤케 복잡해?

profile
TIL 남기는 공간입니다

0개의 댓글