温馨提示×

怎么用java递归实现单链表反转

小亿
86
2023-12-20 13:42:02
栏目: 编程语言

使用递归来反转单链表需要使用两个指针,一个用来指向当前节点,另一个用来指向当前节点的前一个节点。递归的终止条件是当前节点为null,即已经反转到链表的尾部。

以下是使用递归实现单链表反转的Java代码:

class Node {
    int data;
    Node next;

    Node(int data) {
        this.data = data;
        next = null;
    }
}

class LinkedList {
    Node head;

    LinkedList() {
        head = null;
    }

    // 递归反转链表
    Node reverse(Node currentNode, Node previousNode) {
        // 递归终止条件
        if (currentNode == null) {
            return previousNode;
        }

        // 保存当前节点的下一个节点
        Node nextNode = currentNode.next;
        // 将当前节点的next指针指向前一个节点
        currentNode.next = previousNode;

        // 递归反转剩余部分
        return reverse(nextNode, currentNode);
    }

    // 插入节点到链表尾部
    void insert(int data) {
        Node newNode = new Node(data);

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

    // 打印链表
    void printList(Node node) {
        while (node != null) {
            System.out.print(node.data + " ");
            node = node.next;
        }
    }

    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.insert(1);
        list.insert(2);
        list.insert(3);
        list.insert(4);

        System.out.println("原始链表:");
        list.printList(list.head);

        // 反转链表
        list.head = list.reverse(list.head, null);

        System.out.println("\n反转后的链表:");
        list.printList(list.head);
    }
}

输出结果为:

原始链表: 1 2 3 4 反转后的链表: 4 3 2 1

0