package structure;
public class List {
protected static class Node { // 이중 클래스
// 필드
private T data; // 저장하는 데이터 값
private Node next; // 다음 노드의 주소를 저장
// 생성자
Node(T data, Node next) {
this.data = data;
this.next = next;
}
Node(T data) {
this(data, null);
}
Node(Node next) {
this(null, next);
}
Node() {
this(null, null);
}
// 메소드
public void setData(T data) { // 데이터를 수정
this.data = data;
}
public T getData() {// 데이터를 확인
return data;
}
public Node getNext() { // 다음노드를 확인
return next;
}
public void setNext(Node next) { // 다음 노드의 주소를 수정
this.next = next;
}
}// end class Node
private Node node; // 가장 처음 노드
private int length; // 노드의 크기
List() {
node = null;
length = 0;
}
// 메소드
/* List에 특정 노드를 출력 */
private Node getNode(int index) { // 특정 위치의 노드를 선택 -> 0에서 부터 시작
Node temp = node;
if (index < 0) { // 음수이면 null을 반환
return null;
}
for (int i = 0; i < index; i++) { // index가 0이면 실행하지 않는다., index가 1이상이면 그 위치의 노드를 temp에 저장
temp = temp.getNext();
}
return temp;
}// end method indexNode
/* 특정 인덱스의 값으로 데이터를 출력 */
public T select(int index) {
Node n = getNode(index);
return n.getData();
}
/* 특정 위치에 노드를 추가 */
public void append(int index, T data) {
Node newNode = new Node(data);
if(index == 0) {
newNode.setNext(node);
node = newNode;
}else {
Node priorNode = getNode(index - 1);
newNode.setNext(priorNode.getNext());
priorNode.setNext(newNode);
}
length++;
}// end method append
public void append(T data) {
append(length, data);
}
/* 특정 위치의 노드를 제거 */
public void delete(int index) {
if(index == 0) {
node = node.getNext();
}else {
Node delNode = getNode(index);
Node priorNode = getNode(index -1);
priorNode.setNext(priorNode.getNext());
}
length--;
}// end method delete
public void delete() {
delete(length-1);
}
public int length() {
return length;
}
}// end class List
'Java > 문제' 카테고리의 다른 글
| [자료구조]힙 (0) | 2019.06.19 |
|---|---|
| 여러 쓰레드에서 하나의 변수에 차례로 접근하 (0) | 2019.06.12 |
| [Java] 별출력하기 (0) | 2019.06.10 |
| Java_Stack,Queue 상속으로 구현 (0) | 2019.06.10 |
| 급여정보조회 프로그램 (0) | 2019.06.10 |