[Javaデータ構造]リンクリストといくつかの簡単な操作の学習

学習目標:

目標:Javaデータ構造の知識をすばやく習得する


学習内容:

この記事の内容:リンクリストの学習


1.リンクリストの原則

ここに画像の説明を挿入
要素(要素):線形
ジャンクション(ノード)内のテーブルの実際のコンテンツ:導入されたリスト構造組織は、以外の要素を保持することに加えて、ノード参照ポイントにも格納されます

class Node{
    
    
	int val;//保存元素
	Node next;//保存指向下一个结点的引用,其中尾结点的next=null
}

現在、リンクリスト全体がヘッドノードで表されています

//head是一条链表的头结点,通过head可以找到链表所有结点,所以用头结点完全代表整个链表
Node head;

//某条链表的头结点是空,表示头结点不存在,也就是空链表
Node head=null;

2.リンクリストのコード実装

2.1リンクリストのノード定義

public class Node {
    
    
    int val;
    String sval;
    Node next;

    public Node(int val) {
    
    
        this.val = val;
    }

    public Node(String sval) {
    
    
        this.sval = sval;
    }

    @Override
    public String toString() {
    
    
        return "[" + val +"]";
    }
}

2.2リンクリストを作成する

[1 2 34]リンクリストを作成する

public static Node creatList() {
    
    
     Node a = new Node(1);
     Node b = new Node(2);
     Node c = new Node(3);
     Node d = new Node(4);
     
     a.next = b;
     b.next = c;
     c.next = d;
     d.next = null;
     
     return a;
}

3.リンクリストのいくつかの簡単な操作

3.1トラバーサルを通じて、リンクリストのすべての要素を印刷します

 Node head = creatList();
 System.out.println("for循环遍历并打印链表:");
 for (Node cur = head; cur != null; cur = cur.next) {
    
    
	 System.out.println(cur.val);
}

System.out.println("while循环打印链表:");
Node cur = head;
while (cur != null) {
    
    
    System.out.println(cur.val);
    cur = cur.next;
}
//运行结果
for循环打印链表:
1
2
3
4
while循环打印链表:
1
2
3
4

3.2トラバースして、リンクリストの最後のノードを見つけます

 private static void findEnd() {
    
    
        System.out.println("链表最后一个元素:");
        Node head = creatList();
        for (Node cur = head; cur != null; cur = cur.next) {
    
    
            if (cur.next == null) {
    
    
                System.out.println(cur.val);
            }
        }
    }
//运行结果
链表最后一个元素:
4

3.3トラバーサルを通じて、リンクリストの最後から2番目のノードを見つけます

    private static void findEndTwo() {
    
    
        System.out.println("链表倒数第二个元素:");
        Node head = creatList();
        Node cur = head;
        while (cur != null && cur.next != null) {
    
    
            if (cur.next.next == null) {
    
    
                System.out.println(cur.val);
            }
            cur = cur.next;
        }
    }
//运行结果
链表倒数第二个元素:
3        

3.4トラバースして、リンクリストのn番目のノードを見つけます

 private static void findN(int n) {
    
    
        System.out.println("链表第"+n+"个元素");
        Node head = creatList();
        Node cur = head;
        for (int i = 1; i < n; i++) {
    
    
            cur = cur.next;
        }
        System.out.println(cur.val);

    }
 //当n=2时的运行结果
链表第2个元素
2

3.5トラバースして、リンクリストの下からn番目のノードを見つけます

 private static void findEndN(int n) {
    
    
        System.out.println("链表倒数第"+n+"个元素");
        int count = 0;//计算链表长度
        Node head = creatList();
        for (Node cur = head; cur != null; cur = cur.next) {
    
    
            count++;
        }
        Node cur = head;
        for (int i = 1; i < count + 1 - n; i++) {
    
    
            cur = cur.next;
        }
        System.out.println(cur.val);
    }
 //当n=2时的运行结果
 链表倒数第2个元素
 3

3.6リンクリストに要素が含まれているかどうかを確認する

    //断链表是否包含某个元素
    private static boolean contains(int e) {
    
    
        Node head = creatList();
        for (Node cur = head; cur != null; cur = cur.next) {
    
    
            if (cur.val == e) {
    
    
                return true;
            }
        }
        return false;
    }

おすすめ

転載: blog.csdn.net/zhangxxin/article/details/113565227