ホームページ  >  記事  >  Java  >  Java リンク リストの基本操作 (追加、削除、確認、変更) を実装する方法

Java リンク リストの基本操作 (追加、削除、確認、変更) を実装する方法

王林
王林転載
2019-11-28 14:24:272826ブラウズ

Java リンク リストの基本操作 (追加、削除、確認、変更) を実装する方法

リンク リストも線形データ構造であり、配列とは異なり、メモリにランダムに格納されます。

次は、リンク リストの 4 つの操作を網羅した完全な例です。注意すべき点がいくつかあります:

(1) 追加、削除、変更、確認する前に、次のことが必要です。境界判定のために次のマークをチェックします;

(2) last という名前のノードを追加すると、リンクされたリストの最後での操作が容易になり、最後のノードを見つけるための時間の複雑さがなくなります;

(3) リンクリストに要素を挿入するときは、まず挿入する前のノードの prevNode を見つけ、次に prevNode の next を記録します。挿入するときは、まず prevNode の next が挿入するノードを指すようにし、次に prevNode を記録します。挿入されるノードの次を指します。 next は現在の次のノードを指します。これは C の操作とは少し異なります;

(4) ノードを削除するときは、removedNode を使用して削除したノードの戻り値を記録し、サイズを 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);
    }
}

さらに関連するチュートリアルを知りたい場合は、 javaDevelopment Introduction

にアクセスしてください。

以上がJava リンク リストの基本操作 (追加、削除、確認、変更) を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。