Java 程序:如何反转链表

原文:https://www.studytonight.com/java-programs/how-to-reverse-a-linked-list-in-java

在本教程中,我们将看到如何在 java 中反转链表。LinkedList 是一种线性数据结构,其中元素不存储在连续的位置,每个元素都是一个单独的对象,具有数据部分和地址部分。每个元素都被称为一个节点。由于插入和删除的动态性和容易性,它们比数组更受欢迎。但是在继续之前,如果你不熟悉 java 中链表的概念,那么一定要查看一下 Java 中链表上的文章。

输入:输入链表元素:6 7 8 4 5

输出:反转链表前:6 7 8 9 5

反向链表后:5 9 8 7 6

这可以通过使用以下方法来实现:

方法 1:使用内置方法

方法 2:不使用内置方法

让我们看看这些方法中的每一种,以便更好地理解。

Java 程序:程序 1:反向链表

在这个程序中,我们将看到如何使用 collections 类在 java 中反转链表。

算法:

  1. 开始
  2. 声明没有任何初始大小的Integer类型的链表。
  3. 使用 add 方法添加元素。
  4. 将元素追加到列表的末尾。
  5. 冲销前打印链表元素。
  6. 使用内置的 Collections.reverse()方法来反转链表。
  7. 反转后打印链表元素。
  8. 停止

让我们看看下面的例子,以更好地理解上述算法。

// Java program for reversing a linked list using in-built collections class
import java.util.*;

public class Main 
{
    public static void main(String[] args)
    {
        // Declaring linkedlist without any initial size
        LinkedList<Integer> ll = new LinkedList<Integer>();

        // Appending elements at the end of the list
        ll.add(new Integer(1));
        ll.add(new Integer(2));
        ll.add(new Integer(3));
        ll.add(new Integer(4));
        ll.add(new Integer(5));
        System.out.println("The elements of the linked list before reversing: " + ll);
        // Collections.reverse method to reverse the list
        Collections.reverse(ll);
        System.out.println("The elements of the linked list after reversing: " + ll);
    }
}

反转前链表的元素:[1,2,3,4,5] 反转后链表的元素:[5,4,3,2,1]

Java 程序:程序 2:反向链表

在这个程序中,我们将看到如何使用任何内置方法在 java 中反转链表。

算法:

  1. 开始
  2. 声明没有任何初始大小的String类型的链表。
  3. 使用 add 方法添加元素。
  4. 将元素追加到列表的末尾。
  5. 冲销前打印链表元素。
  6. 使用用户定义的函数进行反转。
  7. 以链表为参数,返回反向链表。
  8. 循环 n/2 次,其中“n”是链表中的元素数。
  9. 在第一遍中,交换第一个和第 n 个元素。
  10. 在第二遍中,交换第二个和第(n-1)个元素,以此类推,直到到达链表的中间。
  11. 循环终止后返回链表。
  12. 反转后打印链表元素。
  13. 停止

让我们看看下面的例子,以更好地理解上述算法。

// Java program to reverse a linked list
import java.util.*;

public class Main 
{
    public static void main(String[] args)
    {
        LinkedList<String> ll = new LinkedList<String>();
        ll.add(new String("Physics"));
        ll.add(new String("Maths"));
        ll.add(new String("Java"));
        ll.add(new String("English"));
        ll.add(new String("Chemistry"));
        System.out.println("The elements of the linked list before reversing: " + ll);
        // Calling user defined function for reversing
        ll = reverseLinkedList(ll);
        System.out.println("The elements of the linked list after reversing: " + ll);
    }
    //Takes a linkedlist as a parameter and returns a reversed linked list
    public static LinkedList<String> reverseLinkedList(LinkedList<String> ll)
    {
        for (int i = 0; i < ll.size() / 2; i++) 
        {
            String temp = ll.get(i);
            ll.set(i, ll.get(ll.size() - i - 1));
            ll.set(ll.size() - i - 1, temp);
        }
        // Return the reversed arraylist
        return ll;
    }
}

反转前链表的元素:【物理、数学、Java、英语、化学】 反转后链表的元素:【化学、英语、Java、数学、物理】