자바 링크 에 요 소 를 추가 하 는 원리 와 실현 방법 에 대한 상세 한 설명
7074 단어 Java링크 에 요소 추가
1.링크 의 헤드 노드 도입
1.1 기본 적 인 링크 구조:
1.2 링크 에 있어 링크 의 모든 노드 를 방문 하려 면 링크 의 머리 를 저장 해 야 한다.만약 에 링크 의 머리 노드 가 head 라면 링크 의 첫 번 째 노드 를 가리킨다.그림 과 같다.
1.3 코드 를 사용 하여 이때 의 링크 를 표시 합 니 다.
//
private Node head;
//
private int size;
//
public LinkedList() {
head = null;
size = 0;
}
//
public int getSize() {
return size;
}
//
public boolean isEmpty() {
return size == 0;
}
2.체인 헤더 에 요소 추가2.1 초기 에 링크 가 다음 과 같다 고 가정 합 니 다.
2.2 체인 헤더 에 666 요 소 를 추가 하려 면 먼저 666 을 한 노드 에 넣 고 노드 에 이 요소 와 해당 하 는 next 를 저장 해 야 한다.
동작 은 다음 과 같 습 니 다.
첫 번 째 단계:현재 666 이 노드(node)의 next 를 head 로 가리 키 고 코드 는 다음 과 같 습 니 다.
node.next=head
그림 은 다음 과 같다.두 번 째 단계:그리고 헤드 를 새로운 노드 666 로 가리 키 기
head=node
그림 은 다음 과 같다.첫 번 째,두 번 째 단 계 를 통 해 우 리 는 새로운 노드 를 첫 번 째 절 에 추가 하 는 데 성공 했다.이 때 node 이 변 수 는 이 라운드 의 작업 을 끝 냈 고 결 과 는 다음 과 같 습 니 다.
2.3 체인 헤더 에 새로운 요 소 를 추가 하 는 관련 코드
// e
public void addFirst(E e) {
Node node = new Node(e);
node.next = head;
head = node;
size++;
}
...과 같다
// e
public void addFirst(E e) {
head = new Node(e, head);
size++;
}
2.4 링크 중간 에 요 소 를 추가 합 니 다.초기 링크 를 다음 과 같이 가정 합 니 다.
색인 이 2 인 위치 에 요소 666 을 추가 해 야 한다 고 가정 합 니 다.
작업 단계:
1):666 이 노드 를 만 듭 니 다.
2):하나의 변수 prev 를 사용 하여 노드 를 삽입 해 야 하 는 곳 의 앞 노드 를 표시 합 니 다.처음에 prev 와 머리 노드 head 는 같 았 습 니 다.
색인 이 2 인 위치 에 새 요 소 를 삽입 해 야 합 니 다.색인 이 2 인 이전 위치(색인 이 1)를 찾 은 다음 prev 를 1 노드 로 가리 키 면 됩 니 다.
3):원소 추가 작업 진행
첫 번 째 단계:node 의 next 를 prev 의 다음 노드 요소 로 가리 키 기
node.next=prev.next
두 번 째 단계:prev 의 next 를 node 로 가리 키 기
prev.next=node
첫 번 째,두 번 째 단 계 를 통 해 새로운 요 소 를 색인 이 2 인 곳 에 삽입 할 수 있 습 니 다.
위 에서 알 수 있 듯 이 링크 에 요 소 를 추가 하 는 관건 은 추가 할 노드 의 앞 노드 를 찾 는 것 이다.따라서 색인 이 0 인 노드 에 요 소 를 추가 하려 면 따로 처리 해 야 한다.
링크 중간 에 요 소 를 추가 하 는 코드:
// index(0--based) e ( , )
public void add(int index, E e) {
if (index < 0 || index > size) {
throw new IllegalArgumentException(" ");
}
//
if (index == 0) {
addFirst(e);
} else {
Node prev = head;
for (int i = 0; i < index - 1; i++) {//
prev = prev.next;
}
Node node = new Node(e);
node.next = prev.next;
prev.next = node;
size++;
}
}
이 때 코드 는 다음 과 같 습 니 다.
// index(0--based) e ( , )
public void add(int index, E e) {
if (index < 0 || index > size) {
throw new IllegalArgumentException(" ");
}
//
if (index == 0) {
addFirst(e);
} else {
Node prev = head;
for (int i = 0; i < index - 1; i++) {//
prev = prev.next;
}
// Node node = new Node(e);
// node.next = prev.next;
// prev.next = node;
prev.next=new Node(e,prev.next);
size++;
}
}
3.링크 끝 에 요소 추가위 와 같은 add()방법 을 다시 사용 합 니 다.
//
public void addLast(E e){
add(size,e);
}
이 소절 전체 코드:
package LinkedList;
public class LinkedList<E> {
// Node
private class Node<E> {
public E e;
public Node next;
//
public Node(E e, Node next) {
this.e = e;
this.next = next;
}
//
public Node(E e) {
this.e = e;
this.next = null;
}
//
public Node() {
this(null, null);
}
@Override
public String toString() {
return e.toString();
}
}
//
private Node head;
//
private int size;
//
public LinkedList() {
head = null;
size = 0;
}
//
public int getSize() {
return size;
}
//
public boolean isEmpty() {
return size == 0;
}
// e
public void addFirst(E e) {
head = new Node(e, head);
size++;
}
// index(0--based) e ( , )
public void add(int index, E e) {
if (index < 0 || index > size) {
throw new IllegalArgumentException(" ");
}
//
if (index == 0) {
addFirst(e);
} else {
Node prev = head;
for (int i = 0; i < index - 1; i++) {//
prev = prev.next;
}
// Node node = new Node(e);
// node.next = prev.next;
// prev.next = node;
prev.next=new Node(e,prev.next);
size++;
}
}
//
public void addLast(E e){
add(size,e);
}
}
자바 알고리즘 과 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.