在 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