728x90
반응형
자료구조 일반적인 LinkedList 에 대해서 공부해보겠습니다.
아래의 코드와 같이 연결이 되어잇는 것을 LinkedList 로 구현될 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package com.allendowney.thinkdast;
/**
* @author downey
*
*/
public class ListNode {
public Object data;
public ListNode next;
public ListNode() {
this.data = null;
this.next = null;
}
public ListNode(Object data) {
this.data = data;
this.next = null;
}
public ListNode(Object data, ListNode next) {
this.data = data;
this.next = next;
}
public String toString() {
return "ListNode(" + data.toString() + ")";
}
}
|
cs |
위의 코드를 가지고 아래와 같이 실행하여
1. 노드와 [ 연결 ] 을 둘 다 수행할 수 있습니다.
2. 혹은 노드를 먼저 생성하고 그 이후에 연결할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public class LinkedListExample {
/**
* @param args
*/
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
node1.next = node2;
node2.next = node3;
node3.next = null;
ListNode node0 = new ListNode(0, node1);
System.out.println(node0);
System.out.println(node1);
}
}
|
cs |
xxxxxxxxxxxxx example xxxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
@Override
public boolean add(E element) {
if (head == null) {
head = new Node(element);
} else {
Node node = head;
// loop until the last node
for ( ; node.next != null; node = node.next) {}
node.next = new Node(element);
}
size++;
return true;
}
@Override
public void add(int index, E element) {
//TODO: FILL THIS IN!
// this is about
// if (index == 0 )
// for (int i index )
if ( index == 0) {
head = new Node(element); // first node insertion
// for( ; he) // other nodes should be going to change their index
}
else {
Node node = head;
for (; node.next != null ; node = node.next) {
node.next = new Node(element);
}
}
size++;
}
|
cs |
xxxxxxxxxxxxx example xxxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
private Node getNode(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
Node node = head;
for (int i=0; i<index; i++) {
node = node.next;
}
return node;
}
@Override
public int indexOf(Object target) {
//TODO: FILL THIS IN!
Node node = head;
for (int i = 0; i<size ; i++) {
if( target == node)
return i;
node = node.next;
}
//
return -1;
}
@Override
public boolean remove(Object obj) {
int index = indexOf(obj);
if (index == -1) {
return false;
}
remove(index);
return true;
}
@Override
public E remove(int index) {
//TODO: FILL THIS IN!
// //remove connection
// Node node = head;
Node node = this.getNode(index);
node = null;
if( index != 0) {
Node prevNode = this.getNode(index-1);
Node nextNode = this.getNode(index+1);
prevNode.next = nextNode;
}
else {
//head node setting
Node nextNode = this.getNode(index+1);
this.head = nextNode;
}
size--;
return null;
}
|
cs |
728x90
반응형
'이유's Programming > Java' 카테고리의 다른 글
Java 람다에 관하여! (0) | 2024.11.10 |
---|---|
Two Sum - LeetCode (0) | 2021.10.12 |
[ 알고리즘 ] 선택 정렬 / 빅오 표기법 (0) | 2020.08.18 |
Java Interface (0) | 2020.08.18 |
Java input vs output System (0) | 2020.07.20 |