티스토리 뷰
- memo
- 내가 작성한 코드가 일반적인 경우뿐만 아니라 특수한 혹은 극단적인 경우에도 문제 없이 작동하는지 철저하게 확인하여야 한다.
- 추가시키는 노드의 다음 노드가 없는경우
- 삭제하려는 노드의 다음 노드가 없는경우 등등
- 내가 작성한 코드가 일반적인 경우뿐만 아니라 특수한 혹은 극단적인 경우에도 문제 없이 작동하는지 철저하게 확인하여야 한다.
- Node
- 구성
- 데이터 필드
- 링크 필드
- 다음 node의 주소를 참조함
- 첫 번째 node의 주소는 따로 저장하여야 함
- 구성
- LinkedList에 새 노드 추가시키기(처음 노드로)
- addFirst("Ann")
- 새 노드 만들고 추가할 데이터를 저장
- 새 노드의 next 필드가 현재의 head노드를 가리키도록 함
- newNode.next = head
- 새 노드를 새 head 노드로 함
- head = newNode
- 순서가 중요
- 추가하기전의 head의 값은 기존에 있던 가장 처음 노드의 주소값과 같으므로 새로운 노드의 주소값을 먼저 head에 넣어버리면 기존 첫번째 노드의 주소값은 증발하므로 반드시 먼저 head에 있는 기존 노드의 주소값을 가져와서 새 노드의 링크필드에 넣어주고 그 다음에 head에 새 노드의 주소값을 넣어준다.
- 정리: 새 노드의 링크필드에는 기존 첫번째 노드의 주소값이 들어오고 head에는 새 노드의 주소값 들어간다.
- head -> 새 노드 -> 기존 첫번째 노드
- addFirst 할 때 연결리스트에 노드가 하나도 없다면?
- head = null인 상태
- 2번 과정
- newNode.next = null
- 3번 과정
- head = newNode(새 노드의 링크필드)
- head -> newNode의 data: "Ann", next: null
- addFirst("Ann")
- Node.java
public class Node<T> {
public T data;
public Node<T> next;
public Node( T item ) {
data = item;
next = null;
}
}
- MySingleLinkedList.java
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); // T : type parameter, OK
newNode.next = head;
head = newNode;
size++;
// not ok
/*Node<T> []arr = new Node<T> [100];
T t = new T();
T []array = new T[100];
*/
}
public void add(int index, T item) { //insert
}
public void remove(int index) { // delete
}
public T get(int index) {
return null;
}
public int indexOf(T item) { // search
return -1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MySingleLinkedList<String> list = new MySingleLinkedList<String>();
list.add(0, "Saturday");
list.add(1, "Friday");
list.add(0, "Monday"); // M, S, F
list.add(2, "Tuesday"); // M, S, T, F
String str = list.get(2); // str = "Tuesday";
list.remove(2); // M, S, F
int pos = list.indexOf("Friday"); // pos = 2;
}
}
출처:
인프런 java로 배우는 자료구조
4-2장: 연결리스트의 개념과 기본연산2
https://www.inflearn.com/course/java-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0
'data structure' 카테고리의 다른 글
[Singly Linked List] 검색, 삽입, 삭제 (0) | 2020.03.14 |
---|---|
[Singly Linked List] node 삽입, 삭제 (0) | 2020.03.14 |
Array, LinkedList (0) | 2020.03.14 |
Linked List (0) | 2020.03.13 |
stack, queue (0) | 2020.03.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- client side rendering
- server side rendering
- 배열
- 소프트웨어
- 운영체제
- C
- BFS
- dfs
- 입출력장치
- react
- 알고리즘
- 이진탐색
- 자료구조
- 동적프로그래밍
- 병행프로세스
- 퀵정렬
- 스텍
- javascript
- C++
- Java
- 클래스
- 세마포어
- 재귀함수
- stackframe
- 인접리스트
- 구조체
- Stack
- 교착상태
- 인접행렬
- 최단경로
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함