2022년 11월 6일 코딩 스터디를 진행하며 LinkedList의 방식을 직접 구현한 것입니다.
package linkedList;
public class Main {
public static void main(String[] args) {
LinkedList numbers = new LinkedList();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
numbers.add(2,25);
System.out.println(numbers.toString());
numbers.remove(2);
System.out.println(numbers.toString());
System.out.println(numbers.get(0));
System.out.println("size: "+numbers.size());
}
}
package linkedList;
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++;
}
}
public 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++;
}
}
public void removeFirst() {
Node temp = head;
head = head.next;
temp = null;
}
public void remove(int index) {
if(index==0) {
removeFirst();
}else {
Node temp = node(index-1);
Node tobeDeleted = temp.next;
temp.next = tobeDeleted.next;
if(tobeDeleted == tail) {
tail = temp;
}
tobeDeleted = null;
size--;
}
}
public Object get(int index) {
Node x = node(index);
return x.data;
}
public int size() {
return this.size;
}
public String toString() {
if(head == null) {
return "[]";
}
Node temp = head;
String str = "[";
while(temp.next != null) {
str += temp.data + ", ";
temp = temp.next;
}
str += temp.data; // tail 값 넣어주기
return str+"]";
}
}
'알고리즘 > 구현' 카테고리의 다른 글
알고리즘_MinHeap(최소힙) (1) | 2022.11.10 |
---|---|
알고리즘_ArrayList (0) | 2022.11.10 |
알고리즘_이진트리 (0) | 2022.10.20 |
알고리즘_queue(선형) (1) | 2022.10.04 |