노드
: 연결 리스트에서 하나의 원소를 표현하는 Building Block데이터 필드(data)
: 원소의 값 저장. 저장할 원소의 종류나 크기에 따라 구조 정의하여 사용.링크 필드(link)
: 다음 노드를 참조값을 저장헤드
: 연결 리스트의 첫 노드에 대한 참조값
연결 구조
삽입 연산 : 첫 번째 노드로 삽입
/*
Head -> newNode -> beforeHead -> ... -> Null
새로운 노드를 헤드로 만들고, 이전의 노드들은 새 노드의 링크에 연결.
*/
void addtoFirst(L, i){
Node newNode = new Node();
newNode.data = i;
newNode.link = L;
L = d;
}
/*
Head -> ... -> newNode -> Null
새로운 노드를 이전 마지막 노드의 링크에 연결.
void addtoLast(L, i){
Node newNode = new Node();
newNode.data = i;
newNode.link = null;
if (L == null){
L = newNode;
return;
}
temp = L;
while (temp.link != null){
temp = temp.link;
}
temp.link = newNode;
}
*/
/*
Head -> ... -> newNode -> ... -> null
기준 노드를 찾아 새로운 노드를 연결시키고, 기준 노드의 링크를 새로운 노드의 링크로 넘겨 준다.
*/
void add(L, pre, i){
Node newNode = new Node();
newNode.data = i;
newNode.link = null;
if (L == null){
L = newNode;
}else{
newNode.link = pre.link;
pre.link = newNode;
}
}
/*
Head -> A -> B -> C -> null
1. A 삭제 : Head -> B -> C -> null / A -> null
- Head는 B로 변경.
- A 링크 null.
2. B 삭제 : Head -> A -> C -> null / B -> null
- A 링크 C(B의 링크).
- B 링크 null.
3. C 삭제 : Head -> A -> B -> null / C -> null
- B 링크 null.
*/
void delete (L, target){
if (L == null || target == null) return;
pre = getPreNode(target); // 선행 노드 탐색
// 첫 노드인 경우
if (pre == null){
L = target.link;
}else{
pre.link = target.link;
}
target.link = null;
}