Java & Kotlin
java)linkedList 구현
필자A
2021. 8. 13. 09:41
head와 tail에 -1이 계속 유지됩니다.
끝마디를 제외하고
인덱스가 0이 아닌 1부터 시작합니다.
class MyLinkedList {
Node head;
Node tail;
int count;
public MyLinkedList() {
head = new Node(-1);
tail = new Node(-1);
head.next = tail;
tail.prev = head;
count = 0;
}
public int get(int index) {
Node temp = head;
if(count >= index) {
for(int k = 0; k < index; k ++){
if(temp != null)
temp = temp.next;
else
return -1;
}
}
return temp.val;
}
public void addAtHead(int val) {
Node newNode = new Node(val);
newNode.next = head.next;
newNode.prev = head;
if(head.next != null) head.next.prev = newNode;
head.next = newNode;
count++;
}
public void addAtTail(int val) {
Node newNode = new Node(val);
newNode.prev = tail.prev;
newNode.next = tail;
tail.prev.next = newNode;
tail.prev = newNode;
count++;
}
public void addAtIndex(int index, int val) {
if(index < 0 || index > count ) {
return;
}
if(index == 0) {
addAtHead(val);
return;
}
if(index == count) {
addAtTail(val);
return;
}
Node newNode = new Node(val);
Node tempNode = head;
for(int i = 0; i < index; i++) {
tempNode = tempNode.next;
}
newNode.next = tempNode;
if(tempNode.prev.prev != null)
newNode.prev = tempNode.prev.prev;
else
newNode.prev = head;
newNode.prev.next = newNode;
newNode.next.prev = newNode;
count++;
}
public void deleteAtIndex(int index) {
if(count > index) {
Node temp = head;
for(int k = 0; k < index; k++){
temp = temp.next;
}
temp.prev.next = temp.next;
temp.next.prev = temp.prev;
temp = null;
}
count--;
}
public void print() {
Node temp = head;
while(temp != null) {
System.out.print(temp.val + ", ");
temp = temp.next;
}
}
class Node {
int val;
Node next;
Node prev;
public Node(int val) {
this.val = val;
next = null;
prev = null;
}
}
}
반응형