在 Java 中列印連結串列

Hiten Kanwar 2023年10月12日
在 Java 中列印連結串列

連結串列用於儲存稱為節點的元素。節點包含兩個實體——資料和引用。引用指向下一個節點。它們在記憶體中的地址並沒有定義連結串列元素的順序。

Java 程式語言為我們提供了 LinkedList 類。這個類在 Java 的 Collections Framework 下可用,它提供了這種雙向連結串列資料結構的功能。

在本教程中,我們將介紹如何在 Java 中列印連結串列。

我們可以使用 LinkedList 類建立一個連結串列物件,使用 add() 函式新增一些元素,並顯示它。

請參考下面的程式碼。

import java.util.*;

public class ABC {
  public static void main(String[] args) {
    LinkedList<String> fruits = new LinkedList<>();
    fruits.add("apple");
    fruits.add("orange");
    fruits.add("mango");
    String str = fruits.listIterator(1).previous();
    System.out.println(fruits);
  }
}

輸出:

[apple, orange, mango]

我們還可以使用 toString() 函式將最終列表顯示為字串。toString() 方法以逗號分隔的字串格式返回連結串列元素。

例如,

import java.util.*;

public class ABC {
  public static void main(String[] args) {
    LinkedList<String> fruits = new LinkedList<>();
    fruits.add("apple");
    fruits.add("orange");
    fruits.add("mango");
    String str = fruits.listIterator(1).previous();
    System.out.println(fruits.toString());
  }
}

輸出:

[apple, orange, mango]

此方法從頭到尾解析連結串列,並使用逗號分隔它們。

我們還可以建立一個使用者定義的類來啟動一個連結串列並建立必要的功能。在使用這樣的類時,我們需要建立一個方法來顯示列表。

我們將需要在使用此方法時覆蓋 toString() 函式並根據使用者的要求更新它。

例如,

public class LinkedListNode {
  private int data;
  private LinkedListNode next;
  public LinkedListNode(int data) {
    this.data = data;
    this.next = null;
  }
  public int getData() {
    return data;
  }
  public void setData(int d) {
    data = d;
  }
  public LinkedListNode getNext() {
    return next;
  }
  public void setNext(LinkedListNode n) {
    next = n;
  }
}

public class LinkedList {
  public LinkedListNode head;
  public static void main(String[] args) {
    LinkedList list = new LinkedList();
    list.insertFront(1);
    list.insertFront(2);
    list.insertFront(3);
    System.out.println(list.toString());
  }
  public LinkedList() {
    this.head = null;
  }
  public int removeFront() {
    if (head == null) {
      System.out.println("Empty list");
      return 0;
    } else {
      int temp = head.getData();
      head = head.getNext();
      return temp;
    }
  }
  public void insertFront(int data) {
    if (head == null) {
      head = new LinkedListNode(data);
    } else {
      LinkedListNode newNode = new LinkedListNode(data);
      newNode.setNext(head);
      head = newNode;
    }
  }
  public void insertBack(int data) {
    if (head == null) {
      head = new LinkedListNode(data);
    } else {
      LinkedListNode newNode = new LinkedListNode(data);
      LinkedListNode current = head;
      while (current.getNext() != null) {
        current = current.getNext();
      }
      current.setNext(newNode);
    }
  }

  public int removeBack() {
    if (head == null) {
      System.out.println("Empty list");
      return 0;
    } else if (head.getNext() == null) {
      int temp = head.getData();
      head = null;
      return temp;
    } else {
      LinkedListNode current = head;
      while (current.getNext().getNext() != null) {
        current = current.getNext();
      }
      int temp = current.getNext().getData();
      current.setNext(null);
      return temp;
    }
  }

  public String toString() {
    String result = "";
    LinkedListNode current = head;
    while (current.getNext() != null) {
      result += current.getData();
      if (current.getNext() != null) {
        result += ", ";
      }
      current = current.getNext();
    }
    result += current.getData();
    return "Contents of the List: " + result;
  }

  public LinkedListNode getHead() {
    return head;
  }
}

輸出:

Contents of the List: 3, 2, 1

我們也可以直接列印需要的列表,無需將其格式化為字串。我們也從初始節點開始,顯示它,然後移動到下一個節點。

請參考以下程式碼。

public class LinkedListNode {
  private int data;
  private LinkedListNode next;
  public LinkedListNode(int data) {
    this.data = data;
    this.next = null;
  }
  public int getData() {
    return data;
  }
  public void setData(int d) {
    data = d;
  }
  public LinkedListNode getNext() {
    return next;
  }
  public void setNext(LinkedListNode n) {
    next = n;
  }
}

public class LinkedList {
  public LinkedListNode head;
  public static void main(String[] args) {
    LinkedList list = new LinkedList();
    list.insertFront(1);
    list.insertFront(2);
    list.insertFront(3);
    list.display();
  }
  public LinkedList() {
    this.head = null;
  }
  public int removeFront() {
    if (head == null) {
      System.out.println("Empty list");
      return 0;
    } else {
      int temp = head.getData();
      head = head.getNext();
      return temp;
    }
  }
  public void insertFront(int data) {
    if (head == null) {
      head = new LinkedListNode(data);
    } else {
      LinkedListNode newNode = new LinkedListNode(data);
      newNode.setNext(head);
      head = newNode;
    }
  }
  public void insertBack(int data) {
    if (head == null) {
      head = new LinkedListNode(data);
    } else {
      LinkedListNode newNode = new LinkedListNode(data);
      LinkedListNode current = head;
      while (current.getNext() != null) {
        current = current.getNext();
      }
      current.setNext(newNode);
    }
  }

  public int removeBack() {
    if (head == null) {
      System.out.println("Empty list");
      return 0;
    } else if (head.getNext() == null) {
      int temp = head.getData();
      head = null;
      return temp;
    } else {
      LinkedListNode current = head;
      while (current.getNext().getNext() != null) {
        current = current.getNext();
      }
      int temp = current.getNext().getData();
      current.setNext(null);
      return temp;
    }
  }

  public void display() {
    LinkedListNode current = head;
    while (current.getNext() != null) {
      System.out.println(current.getData());
      current = current.getNext();
    }
    System.out.println(current.getData());
  }

  public LinkedListNode getHead() {
    return head;
  }
}

輸出:

3
2
1

相關文章 - Java Linked List