1. ホーム
  2. java

[解決済み] Javaでリンクリストのデータ構造を作成するには?[クローズド]

2022-06-14 16:48:57

質問

Javaでリンクリストを作るには、どのような方法がありますか?

どのように解決するのですか?

Java に慣れている開発者にとって明白な解決策は LinkedList クラスですでに提供されている java.util . しかし、何らかの理由であなた自身の実装を作りたいとします。ここでは、リストの先頭に新しいリンクを挿入し、リストの先頭から削除し、リストをループしてその中に含まれるリンクを表示するリンクリストの簡単な例を示します。 機能拡張 この実装の強化点としては 二重リンクリスト にメソッドを追加することです。 を挿入する 削除 を中間または末尾に追加し、さらに 得る ソート メソッドもあります。

ノート : この例では、Linkオブジェクトは実際には別のLinkオブジェクトを含んでいません。 nextLink は実際には別のリンクへの参照に過ぎません。

class Link {
    public int data1;
    public double data2;
    public Link nextLink;

    //Link constructor
    public Link(int d1, double d2) {
        data1 = d1;
        data2 = d2;
    }

    //Print Link data
    public void printLink() {
        System.out.print("{" + data1 + ", " + data2 + "} ");
    }
}

class LinkList {
    private Link first;

    //LinkList constructor
    public LinkList() {
        first = null;
    }

    //Returns true if list is empty
    public boolean isEmpty() {
        return first == null;
    }

    //Inserts a new Link at the first of the list
    public void insert(int d1, double d2) {
        Link link = new Link(d1, d2);
        link.nextLink = first;
        first = link;
    }

    //Deletes the link at the first of the list
    public Link delete() {
        Link temp = first;
        if(first == null){
         return null;
         //throw new NoSuchElementException(); // this is the better way. 
        }
        first = first.nextLink;
        return temp;
    }

    //Prints list data
    public void printList() {
        Link currentLink = first;
        System.out.print("List: ");
        while(currentLink != null) {
            currentLink.printLink();
            currentLink = currentLink.nextLink;
        }
        System.out.println("");
    }
}  

class LinkListTest {
    public static void main(String[] args) {
        LinkList list = new LinkList();

        list.insert(1, 1.01);
        list.insert(2, 2.02);
        list.insert(3, 3.03);
        list.insert(4, 4.04);
        list.insert(5, 5.05);

        list.printList();

        while(!list.isEmpty()) {
            Link deletedLink = list.delete();
            System.out.print("deleted: ");
            deletedLink.printLink();
            System.out.println("");
        }
        list.printList();
    }
}