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;
}
}
}
new Node(input)
이 만들어진다.data
는 input 값을 가진다.next
는 null 값을 가진다.head
는 null 값이기 때문에 newNode.next
는 null 값이다.newNode
의 정보를 head
에 저장한다. -> head
가 newNode
를 가리킨다.size
를 1증가 시킨다.next
값이 null이면, 즉 노드가 1개밖에 없다면, tail
에 head
를 저장한다.만약에 addFirst 메소드를 이용해서 노드가 한개 더 만들어지는 상황이라고 생각하자. new Node()
를 통해 새로운 Node
가 만들어졌다. 그리고 새 노드인 newNode.next
가 head
값을 저장하면서, 즉 이전 노드를 가리키게 된다. 그 다음, 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++;
}
}
new Node(input)
이 만들어진다addFirst()
로 노드를 넣어줘도 무방하기 때문에 그렇게 한다.newNode
를 tail.next
에 저장한다. ~에 저장한다고 말하긴 했지만 tail.next
가 newNode
를 가리킨다고 하는 말이 맞을 것이다. 그런 다음에, newNode
를 tail
에 저장하면서 tail
이 newNode
를 가리키게 된다.내가 적고도 뭔소린지 모르겠네 왤케 복잡해?