学習目標:
目標: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;
}