연결리스트의 노드들을 처음부터 순서대로 방문하는 것을 순회한다고 말한다.
indexOf 메서드는 입력된 데이터 item과 동일한 데이터를 저장한 노드를
찾아서 그 노드번호를 반환한다. 그것을 위해서 연결리스트를 순회한다.
getNode는 입력으로 index를 받아서
index번째 노드의 주소를 리턴하는 함수이다.
추가로
이전에 만들었던 추가,삭제하는 메서드들을
하나로 통합하였다.
package section6;
public class MySingleLinkedList<T> {
public Node<T> head;
public int size = 0;
public MySingleLinkedList() {
head = null;
size = 0;
}
public void addFirst(T item) {
Node<T> newNode = new Node<T>(item);
newNode.next = head;
head = newNode;
size++;
}
public void addAfter(Node<T> before, T item) {
Node<T> temp = new Node<T>(item);
temp.next = before.next;
before.next = temp;
size++;
}
public T removeFirst() { //delete
if(head==null) {
return null;
}
else {
T temp = head.data;
head = head.next;
size--;
return temp;
}
}
public T removeAfter(Node<T> before) {
if(before.next==null) {
return null;
}
else {
T temp = before.next.data;
before.next = before.next.next;
return temp;
}
}
public int indexOf(T item) { //search
Node<T> p = head;
int index = 0;
while(p != null) {
if(p.data.equals(item)) {
return index;
}
else {
p = p.next;
index++;
}
}
return -1;
}
public Node<T> getNode(int index){
if(index<0 || index>=size) {
return null;
}
else {
Node<T> p = head;
for(int i=0; i<index; i++) {
p =p.next;
}
return p;
}
}
public T get(int index) {
if(index<0 || index>=size) {
return null;
}
return getNode(index).data;
}
public void add(int index, T item) {
if(index <0||index >size) {
return;
}
if(index==0) {
addFirst(item);
}
else {
Node<T> q = getNode(index-1);
addAfter(q, item);
}
}
public T remove(int index) {
if(index < 0 || index >= size) {
return null;
}
if(index ==0) {
return removeFirst();
}
Node<T> prev = getNode(index-1);
return removeAfter(prev);
}
public static void main(String[] args) {
}
}'알고리즘 with 자바 > 자료구조' 카테고리의 다른 글
| 연결리스트와 Iterator 1 (0) | 2021.07.19 |
|---|---|
| 연결리스트의 개념과 기본연산 5 (0) | 2021.07.19 |
| 연결리스트의 개념과 기본연산 3 (0) | 2021.07.15 |
| 연결리스트의 개념과 기본연산 2 (0) | 2021.07.14 |
| 연결리스트의 개념과 기본연산 1 (0) | 2021.07.14 |