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를 가리키게 된다.내가 적고도 뭔소린지 모르겠네 왤케 복잡해?