728x90
LinkedList 사용방법을 알아보기 위해 어떤식으로 로직이 짜여있는지
자료구조를 분석해 보았습니다.
(생활코딩 자료구조 영상 참고하였음. LinkedList 의 Iterator 부분은 다음에 공부 할 예정.... 넘어려워요...)
LinkedList.java
package test;
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;
}
}
// 첫번째 위치에 데이터 추가
public void addLast(Object input) {
Node newNode = new Node(input);
if (size == 0) {
addFirst(input);
} else {
tail.next = newNode;
tail = newNode;
size++;
}
}
// 노드 표현
Node node(int index) {
Node x = head;
for (int i = 0; i < index; i++) {
x = x.next;
}
return x;
}
// 특정한 인덱스에 데이터 추가
public void add(int k, Object input) {
if (k == 0) {
addFirst(input);
} else {
Node temp1 = node(k - 1);
Node temp2 = temp1.next;
Node newNode = new Node(input);
temp1.next = newNode;
newNode.next = temp2;
size++;
if (newNode.next == null) {
tail = newNode;
}
}
}
// 데이터를 보기 쉽게 하기 위해 toString 구현
public String toString() {
if (head == null) {
return "[]";
}
Node temp = head;
String str = "[";
while (temp.next != null) {
str += temp.data + ", ";
temp = temp.next;
}
return str + "]";
}
//첫번째에 있는 값을 삭제해주는 로직
//리턴값 : 삭제된 값
public Object removeFirst() {
Node temp = head;
head = head.next;
Object returnData = temp.data;
temp = null;
size--;
return returnData;
}
//특정 인덱스의 값을 삭제하고 싶을 때
//리턴값 : 삭제된 값
public Object remove(int k) {
if(k == 0) {
return removeFirst();
}
Node temp = node(k-1);
Node todoDeleted = temp.next;
temp.next = temp.next.next;
Object returnData = todoDeleted.data;
if(todoDeleted == tail) {
tail = temp;
}
todoDeleted = null;
size--;
return returnData;
}
// 마지막에 있는 데이터 값을 삭제하고 싶을 때
public Object removeLast() {
return remove(size-1);
}
//사이즈를 가지고 오고 싶을 때
public int size() {
return size;
}
//특정 인덱스의 값을 가지고 오고 싶을 때
public Object get(int k) {
Node temp = node(k);
return temp.data;
}
//데이터값으로 인덱스 정보를 얻어오고 싶을 때
public int indexOf(Object data) {
Node temp = head;
int index = 0; //우리가 찾고자 하는 위치의 정보
while(temp.data != data) { //찾는 데이터값이 데이터값과 같을때까지 반복
temp = temp.next;
index++;
if(temp == null) {
return -1;
}
}
return index;
}
}
Main.java
package test;
public class Main {
public static void main(String[] args) {
LinkedList numbers = new LinkedList();
//실습 : 첫번째에 추가
numbers.addFirst(30);
numbers.addFirst(20);
numbers.addFirst(10);
//실습 : 마지막에 추가
numbers.addLast(40);
numbers.addLast(50);
//실습 : 특정한위치에 데이터 추가
numbers.add(1,15);
//실습 : 데이터를 보기 쉽게 하기 위해 toString 구현
System.out.println(numbers);
//실습 : 첫번째에 있는 값을 삭제해주는 로직
//리턴값 : 삭제된 값
numbers.removeFirst();
System.out.println(numbers);
//실습 : 특정 인덱스의 값을 삭제하고 싶을 때
numbers.remove(2);
System.out.println(numbers);
//실습 : 마지막에 있는 데이터 값을 삭제하고 싶을 때
numbers.removeLast();
System.out.println(numbers);
//실습 :사이즈를 가지고 오고 싶을 때
System.out.println(numbers.size());
//실습 : 특정 인덱스의 값을 가지고 오고 싶을 때
System.out.println(numbers.get(2));
//실습 : 데이터값으로 인덱스 정보를 얻어오고 싶을 때
System.out.println(numbers.indexOf(30));
}
}
'자료구조 (JAVA)' 카테고리의 다른 글
[생활코딩] ArrayList 코드 분석!! 사용방법 (add, remove, get, size, previous, hasNext()... (0) | 2021.06.20 |
---|