본문 바로가기

Java/문제

List 구현(Java)

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