LinkedList Java 제네릭을 사용하여 가장 중요한 메서드를 구현합니다.
7231 단어 javalinkedlistbigodatastructures
소개
안녕하세요 여러분!
이 게시물에서는 LinkedList 데이터 구조를 간략하게 설명하고 Java 프로그래밍 언어를 사용하여 가장 중요한 메서드를 구현하려고 합니다. 따라서 메모리에서 작동하는 방식과 기본 메서드를 구현하는 방식을 알 수 있습니다.
Java의 제네릭을 사용하여 구현하므로 LinkedList에 모든 유형의 데이터를 저장할 수 있습니다.
연결된 목록
연결된 목록은 노드에 값을 저장하는 선형 데이터 구조입니다. 각 노드에는 다음 노드에 대한 데이터 및 참조의 두 부분이 있습니다.
연결 리스트는 배열 다음으로 가장 많이 사용되는 데이터 구조입니다. 다음은 Linked List의 개념을 이해하는 데 중요한 용어입니다.
요소.
다음 노드는 다음이라고 합니다.
목록의 노드이고 목록이 비어 있으면 NULL입니다.
이 이미지는 연결된 목록 개념을 보여줍니다.
기본 작동
이제 이러한 모든 작업을 처음부터 Java로 구현하기 시작합니다.
노드 클래스
먼저 데이터와 다음의 두 부분을 포함하는 노드 클래스를 정의합니다.
class Node<T> {
T nodeData;
Node<T> next; // points to the next node
// Constructor to instantiate the node object with default values
Node(T data) {
this.nodeData = data;
next = null;
}
}
LinkedList 클래스
둘째, 다음을 포함하는 LinkedList 클래스를 정의합니다.
public class MyLinkedList<T> {
Node<T> head;
private int length = 0;
// Constructor
MyLinkedList() {
this.head = null;
}
}
이제 기본 작업을 구현하기 시작합니다.
삽입
삽입에는 두 가지 방법이 있습니다.
먼저
public final void add(T data)
목록 끝에 삽입그리고
public final void add(T data, int pos)
특정 위치에 삽입합니다.// Insert on the end of the LinkedList
// Complexity: O(n)
public final void add(T data) {
Node<T> newNode = new Node<T>(data);
if(this.head == null) {
this.head = newNode;
newNode.next = null;
} else {
Node<T> pointer = this.head;
while (pointer.next != null) {
pointer = pointer.next;
}
pointer.next = newNode;
newNode.next = null;
}
this.length++;
}
// Insert in Specific Position
// Complexity: O(n)
public final void add(T data, int pos) {
if(pos == 0) {
this.addFirst(data);
return;
}
if(pos < 0 || pos > this.length) {
System.out.println("Error: Out of range");
} else {
Node<T> newNode = new Node<T>(data);
Node<T> pointer = head;
for(int i = 1; i < pos; i++) {
pointer = pointer.next;
}
newNode.next = pointer.next;
pointer.next = newNode;
this.length++;
}
}
// Insert First (begging of the list)
public final void addFirst(T data) {
Node<T> newNode = new Node<T>(data);
newNode.next = head;
head = newNode;
this.length++;
}
삭제
// Delete from last of LinkedList
// Complexity: O(n)
public void remove() {
if(isEmpty()) {
System.out.println("Sorry, List is empty!!");
} else if(this.length == 1) {
head = null;
System.out.println("Removed Successfully");
this.length = 0;
} else {
Node<T> pointer = head;
while(pointer.next.next != null) {
pointer = pointer.next;
}
pointer.next = null;
this.length--;
System.out.println("Removed Successfully");
}
}
// Remove LinkedList Element from specific position
// Complexity: O(n)
public void remove(int pos) {
if(pos < 0 || pos >= length) {
System.out.println("Error: Position is out of range");
} else if (pos == length - 1) {
remove();
} else {
if (pos == 0) {
removeFirst();
return;
}
Node<T> pointer = head;
for(int i = 1; i < pos; i++) {
pointer = pointer.next;
}
pointer.next = pointer.next.next;
length--;
}
}
// Remove the first element in the LinkedList
public void removeFirst() {
head = head.next;
length--;
}
// Get LinkedList element's Data for specific Index
// Complexity: O(n)
public T get(int index) {
if(index < 0 || index >= length) {
return null;
}
Node<T> pointer = head;
for(int i = 0; i < index; i++) {
pointer = pointer.next;
}
return pointer.nodeData;
}
얻다
이 메서드는 index 매개 변수로 지정된 노드에 포함된 데이터를 반환합니다.
// Get LinkedList element's Data for specific Index
// Complexity: O(n)
public T get(int index) {
if(index < 0 || index >= length) {
return null;
}
Node<T> pointer = head;
for(int i = 0; i < index; i++) {
pointer = pointer.next;
}
return pointer.nodeData;
}
분명한
public final void clear() {
this.head = null;
length = 0;
}
추가 방법
// Get LinkedList Length
public int getLingth() {
return this.length;
}
// Return true if the LinkedList is empty
public boolean isEmpty() {
if (this.length == 0) return true;
return false;
}
// Convert LinkedList to string
// Complexity: O(n)
public String toString()
{
String S = "{ ";
Node<T> X = head;
if (X == null)
return S + " }";
while (X.next != null) {
S += String.valueOf(X.nodeData) + " -> ";
X = X.next;
}
S += String.valueOf(X.nodeData);
return S + " }";
}
인쇄 방법
// Print all List elements
// Complexity: O(n)
public final void print() {
Node<T> pointer = head;
while (pointer != null) {
System.out.println(pointer.nodeData);
pointer = pointer.next;
}
}
이 게시물이 도움이 되길 바랍니다.
틀린 부분이 있었다면 죄송하고 읽어주셔서 감사합니다.
BR
아마드 무카할.
Reference
이 문제에 관하여(LinkedList Java 제네릭을 사용하여 가장 중요한 메서드를 구현합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ahmedm1999/linkedlist-implementation-of-the-most-critical-methods-using-java-generics-4cff텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)