>  기사  >  Java  >  Java 연결 목록에서 기본 작업(추가, 삭제, 확인, 수정)을 구현하는 방법

Java 연결 목록에서 기본 작업(추가, 삭제, 확인, 수정)을 구현하는 방법

王林
王林앞으로
2019-11-28 14:24:272826검색

Java 연결 목록에서 기본 작업(추가, 삭제, 확인, 수정)을 구현하는 방법

연결된 목록도 선형 데이터 구조이므로 배열과 달리 연결 목록은 메모리에 무작위로 저장됩니다.

다음은 연결 목록의 네 가지 작업을 다루는 완전한 예입니다.

(1) 추가, 삭제, 수정 또는 확인, 확인 필요 주어진 첨자는 경계 판단에 사용됩니다.

(2) 마지막 노드를 추가하면 연결 목록 끝에 작업이 쉬워지고 마지막 노드를 찾는 시간 복잡도가 줄어듭니다. node;

(3) 연결리스트 내부에 요소를 삽입할 때 먼저 삽입할 이전 노드의 prevNode를 찾은 다음 prevNode의 다음을 기록합니다. 삽입할 때 먼저 다음을 가리킵니다. prevNode의 노드를 삽입할 노드로 지정하고, 삽입할 노드의 다음 노드를 현재 다음 노드로 지정합니다. 이 부분도 C++에서의 연산과 조금 다릅니다.

(4) 노드를 삭제할 때, 삭제된 노드의 반환 값을 기록하기 위해 삭제된 노드를 사용하고, 크기를 1씩 줄이는 것을 잊지 마세요. .

관련 무료 동영상 튜토리얼 추천: java 무료 동영상 튜토리얼

작업 예시는 다음과 같습니다:

public class MyLinkedList {
    //定义一个静态的内部类
    private static class Node{
        int data;
        Node next;
        Node(int data){
            this.data = data;
        }
    }
 
    private Node head;
    private Node last;//为了方便尾部插入元素的操作
    private int size;//size表示链表的实际长度
 
    public void insert(int data, int index)throws Exception{
        if(index < 0 || index > size)
            throw new IndexOutOfBoundsException("超出链表节点范围!");
        Node insertedNode = new Node(data);
        if(size == 0){//插入第一个元素时元素个数为0
            head = insertedNode;
            last = insertedNode;
        }else if(size == index){//在链表的末尾插入
            last.next = insertedNode;
            last = insertedNode;
        }else{
            Node prevNode = get(index - 1);
            Node nextNode = prevNode.next;
            prevNode.next = insertedNode;
            insertedNode.next = nextNode;
        }
        size++;
    }
 
    public void update(int data, int index) throws Exception{
        if(index < 0 || index >= size)
            throw new IndexOutOfBoundsException("超出链表节点范围!");
        if(index == 0)
            head.data = data;
        else if(index == size - 1)
            last.data = data;
        else{
            Node temp = get(index);
            temp.data = data;
        }
    }
 
    public Node remove(int index) throws Exception {
        if(index < 0 || index >= size){
            throw new IndexOutOfBoundsException("超出链表节点范围!");
        }
        Node removedNode = null;//不给removedNode分配堆内存
        if(index == 0){
            removedNode = head;
            head = head.next;
        }
        else if(index == size - 1){
            //删除尾结点
            Node prevNode = get(index - 1);
            removedNode = prevNode.next;
            prevNode.next = null;
            last = prevNode;
        }
        else{
            Node prevNode = get(index - 1);
            Node nextNode = prevNode.next.next;
            removedNode = prevNode.next;
            prevNode.next = nextNode;
        }
        size--;
        return removedNode;
    }
 
 
 
    //查找链表元素
    public Node get(int index) throws Exception{
        if(index < 0 || index >= size){
            throw new IndexOutOfBoundsException("超出链表节点范围!");
        }
        Node temp = head;
        for(int i = 0; i < index; i++){
            temp = temp.next;
        }
//        size--;
        return temp;
    }
 
    //输出链表
    public void output(){
        Node temp = head;
        while(temp != null){
            System.out.println(temp.data);
            temp = temp.next;
        }
    }
 
    public static void main(String[] args) throws Exception{
        MyLinkedList myLinkedList = new MyLinkedList();
        myLinkedList.insert(3,0);
        myLinkedList.insert(7,1);
        myLinkedList.insert(9,2);
        myLinkedList.insert(5,3);
        myLinkedList.insert(6,1);
        myLinkedList.remove(0);
        myLinkedList.update(2,1);
        myLinkedList.output();
        System.out.println(myLinkedList.size);
    }
}

더 많은 관련 튜토리얼을 보려면 다음을 방문하세요: javaDevelopmentIntroduction

위 내용은 Java 연결 목록에서 기본 작업(추가, 삭제, 확인, 수정)을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제