일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- springSecurity
- 시큐리티 로그인
- 코딩테스트
- 목록
- JAVA11
- sql
- Spring boot
- 시큐리티 로그아웃
- 싱글톤
- 소스트리
- springboot
- 시큐리티로그인
- programmers
- 로그인
- javascript
- codingtest
- gradle
- 시큐리티
- security
- input태그
- 리눅스
- html
- 스프링 부트
- Linux
- css
- 반복문
- java
- 2차원배열
- 프로그래머스
- StyleSheet
Archives
- Today
- Total
JAVAIARY
linkedList 노드의 추가와 삭제 본문
likedList 노드의 추가와 삭제
0. linkedList 생성
MyLinkedList 클래스
public class MyLinkedList {
private MyListNode head;
int count;
public MyLinkedList() {
head = null;
count = 0;
}
public MyListNode addElement(String data) {
MyListNode newNode;
if (head == null) {
newNode = new MyListNode(data);
head = newNode;
}
else {
newNode = new MyListNode(data);
MyListNode temp = head;
while(temp.next != null)
temp = temp.next; //temp를 MyListNode로 생성했기 때문에 next 받아올 수 있음
temp.next = newNode;
}
count++;
return newNode;
}
MyListNode 클래스
public class MyListNode {
private String data; //자료
public MyListNode next; //다음 노드를 가리키는 링크. 링크는 자기자신의 타입을 가리킴
public MyListNode() { //링크 X , 자료값 X
data = null;
next = null;
}
public MyListNode(String data) { // 링크 X, 자료값1 추가
this.data = data;
this.next = null;
}
public MyListNode(String data, MyListNode link) { //링크 O , 자료값2 추가
this.data = data;
this.next = link;
}
public String getData(){
return data;
}
}
// 링크드 리스트를 새로 생성하고 메인에서 add.Element를 사용하여 노드 추가
MyLinkedList list = new MyLinkedList();
1. 노드의 추가
1) 링크의 맨 앞에 추가하기
MyListNode tempNode = head;
MyListNode newNode = new MyListNode(data);
//새 노드를 생성하여 원하는 데이터값을 넣어줌
newNode.next = head;
head = newNode;
- newNode가 현재 head를 가리키도록 newNode.next 에 head를 넣어줌 ( 현재 head는 링크의 2번째 순서가 됨)
- newNode를 head로 할당해줌
2) 링크의 중간에 추가하기 (p번째 자리에 넣기)
MyListNode preNode = null;
for (int i=0; i <p; i++) {
preNode = tempNode;
tempNode = tempNode.next;
}
- 최종적으로 preNode는 p-1번째 값이 들어가고,
tempNode에는 p번째 값을 가리키는 tempNode.next가 들어감
newNode.next = preNode.next;
preNode.next = newNode;
- newNode가 p번째 값을 카리키도록 newNode.next에 preNode.next(p번째 값을 가리킴)를 넣음
- preNode가 newNode를 가리키도록 preNode.next에 newNode의 주소값을 넣어줌
===> p번째 자리에 newNode가 오게 됨
3) 전체 코드
public MyListNode insertElement(int position, String data) {
int i;
MyListNode tempNode = head;
MyListNode newNode = new MyListNode(data);
if (position <0 || position > count) { //유효성 검정
System.out.println("추가할 위치 오류입니다.
현재 리스트의 개수는 " +count + "개 입니다." );
return null;
}
if (position == 0){
newNode.next = head; // 추가하고자 하는 위치가 맨 앞일 경우
head = newNode;
}
else {
MyListNode preNode = null;
for (i=0; i <position; i++) {
preNode = tempNode;
tempNode = tempNode.next;
}
newNode.next = preNode.next;
preNode.next = newNode;
}
count++;
return newNode;
}
2. 노드의 삭제
1) 노드의 삭제
MyListNode preNode = null;
for(i = 0; i < position ; i++) {
preNode = tempNode;
tempNode = tempNode.next;
- 최종적으로 preNode에 p-1번째 값,
tempNode에는 p번째 값을 가리키는 tempNode.next가 들어감
preNode.next = tempNode.next;
- p-1번째인 preNode에 p+1번째 값을 가리키는 tempNode.next를 넣음
최종적으로 p번째 노드는 링크에서 빠지고 GarbageCollector가 삭제하게 됨
2) 전체 코드
public MyListNode removeElement(int position ) {
int i;
MyListNode tempNode = head;
if (position >= count ) {
System.out.println("삭제 할 위치 오류입니다. 현재 리스트의 개수는 " +count+"개 입니다.");
return null;
}
if (position == 0) {
head = tempNode.next; //0번(head)이 삭제되어 head가 다음 주소의 노드가 할당됨
}
else {
MyListNode preNode = null;
for(i = 0; i < position ; i++) {
preNode = tempNode;
tempNode = tempNode.next;
}
preNode.next = tempNode.next;
}
count--;
System.out.println(position + "번째 항목이 삭제되었습니다.");
return tempNode;
}
'review' 카테고리의 다른 글
학점 부여 프로그램 (1) | 2022.10.03 |
---|---|
Singleton pattern II (0) | 2022.09.07 |
Singleton Pattern I (0) | 2022.09.05 |
ArrayList 출력 방법 (0) | 2022.09.04 |