TestApp
import java.util.LinkedList;
public class TestApp {
public static void main(String[] args) {
MyLinkedList<Integer> list = new MyLinkedList<Integer>();
System.out.println(list); // ""
list.addFirst(1); // 맨 앞에 추가(더미노드 무시)
System.out.println(list); // 1
list.addLast(2); // 맨 뒤에 추가(더미노드 무시)
list.addLast(3);
list.addLast(4);
list.addFirst(0);
System.out.println(list); // 0 1 2 3 4
Node<Integer> d = list.remove(3); // 지정한 인덱스의 노드 삭제
System.out.println(list); // 0 1 2 4
list.remove(3); // 지정한 인덱스의 노드 삭제
System.out.println(list); // 0 1 2
list.add(2, 3); // 지정한 인덱스에 값 3을 추가
System.out.println(list); // 0, 1, 3, 2
list.clear(); // 모두삭제
}
}
LinekdList
public class MyLinkedList<T> {
public Node<T> head;
public Node<T> tail;
// 맨 처음 값이 만들어지면 더미 노드 2개가 head와 tail로 만들어진다.
// [D]<->[D]
public MyLinkedList() {
head = new Node<T>(null);
tail = new Node<T>(null);
head.nextNode = tail;
tail.prevNode = head;
}
// index 위치 Node에 값을 가져온다.
// [D] <-> [0] <-> [1] <-> [2] <-> [D]
// 0 1 2
public T get(int index) {
Node<T> node = getNode(index);
if(null == node)
return null;
else
return (T) node.data;
}
// index 위치에 Node를 가져온다.
public Node<T> getNode(int index){
return null;
}
// 새로운값 data를 Node로 만들어 맨앞에 위치(더미 노드는 무시한다.)
// [D] <-> [0] <-> [1] <-> [2] <-> [D]
// head nextNode tail
// [D] <-> [data] <-> [0] <-> [1] <-> [2] <-> [D]
// head node nextNode tail
public void addFirst(T data) {
}
// 새로운값 data를 Node로 만들어 맨뒤에 위치(더미 노드는 무시한다.)
// [D] <-> [0] <-> [1] <-> [2] <-> [D]
// head prevNode tail
// [D] <-> [0] <-> [1] <-> [2] <-> [data] <-> [D]
// head prevNode node tail
public void addLast(T data) {
}
// index 위치에 data값을 가진 Node 추가후 연결
// [D] <-> [0] <-> [1] <-> [2] <-> [D]
// [D] <-> [0] <-> [data] <-> [1] <-> [2] <-> [D]
public void add(int index, T data) {
}
// index의 값 삭제후 끊어진 연결을 유지
// [D] <-> [0] <-> [1] <-> [2] <-> [D]
// index
// [D] <-> [0] <-> [2] <-> [D]
public Node<T> remove(int index) {
return null;
}
// 모두 삭제
public void clear() {
}
// 1, 2, 3, 4, N
@Override
public String toString() {
Node<T> curNode = head;
StringBuffer sb = new StringBuffer();
while(curNode.nextNode.data != null){
curNode = curNode.nextNode;
sb.append(curNode.data + " ");
}
return sb.toString();
}
}
class Node<T>{
public Node(T data){
this.data = data;
}
public Object data = 0;
public Node<T> prevNode;
public Node<T> nextNode;
}
반응형