欢迎访问宙启技术站
智能推送

Java函数如何实现链表反转功能

发布时间:2023-06-15 13:15:53

链表是一种常见的数据结构,在Java中可以通过创建链表类来实现。链表反转是指将链表中的节点顺序颠倒,使得原本在前面的节点变为后面的节点,原本在后面的节点变为前面的节点。在这篇文章中,我们将探讨如何在Java中实现链表反转功能。

首先,我们需要定义一个链表类,用来存储链表中的节点。链表节点通常由两个部分组成,一部分是存储数据的属性,另一部分是指向下一个节点的指针。我们可以通过创建一个Node类来表示这个节点:

public class Node {
    int data;   // 存储数据属性
    Node next;  // 指向下一个节点的指针
}

接下来,我们需要实现链表反转的功能。有多种方法可以实现链表反转,我们在这里介绍其中一种——迭代法。迭代法的思路是从头节点开始,依次将每个节点的指针指向前一个节点,直到到达最后一个节点。

具体实现过程如下:

1. 定义三个指针prev、curr和next,分别表示当前节点的前一个节点、当前节点和下一个节点,初始时prev和next均为null,curr指向链表的头节点。

Node prev = null;
Node curr = head;
Node next = null;

2. 循环遍历链表,依次将每个节点的指针指向前一个节点,直到当前节点为null。

while (curr != null) {
    next = curr.next;  // 保存下一个节点
    curr.next = prev;  // 将当前节点指向前一个节点
    prev = curr;       // 前一个节点指针后移
    curr = next;       // 当前节点指针后移
}

3. 反转完成后,需要将链表的头节点指向原本的尾节点,即变为prev指向的节点。

head = prev;

完整的代码如下:

public class LinkedList {
    Node head;

    // 将链表反转
    public void reverse() {
        Node prev = null;
        Node curr = head;
        Node next = null;

        while (curr != null) {
            next = curr.next;  // 保存下一个节点
            curr.next = prev;  // 将当前节点指向前一个节点
            prev = curr;       // 前一个节点指针后移
            curr = next;       // 当前节点指针后移
        }

        head = prev;
    }

    // 添加节点
    public void addNode(int data) {
        Node newNode = new Node();
        newNode.data = data;
        newNode.next = null;

        if (head == null) {
            head = newNode;
        } else {
            Node temp = head;
            while (temp.next != null) {
                temp = temp.next;
            }

            temp.next = newNode;
        }
    }

    // 输出链表元素
    public void printList() {
        Node temp = head;

        while (temp != null) {
            System.out.print(temp.data + " ");
            temp = temp.next;
        }

        System.out.println();
    }

    // 测试用例
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.addNode(1);
        list.addNode(2);
        list.addNode(3);
        list.addNode(4);

        System.out.println("Original list:");
        list.printList();

        list.reverse();

        System.out.println("Reversed list:");
        list.printList();
    }
}

在上面的代码中,我们首先创建一个含有四个节点的链表,然后输出原本的链表元素顺序,接着调用reverse()方法将链表反转,最后输出反转后的链表元素顺序。运行结果如下:

Original list:
1 2 3 4 
Reversed list:
4 3 2 1 

可以看出,链表的反转功能已经被成功实现了。