링크드 리스트 (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개의 댓글

관련 채용 정보