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

链表反转Java函数的实现方法

发布时间:2023-07-06 05:54:51

链表是一种常用的数据结构,它由一系列的节点组成,每个节点包含一个数据域和一个指针域,指向下一个节点。链表反转是指将原始链表中节点的指针指向前一个节点,从而使链表逆序。

实现链表反转的方法有多种,下面介绍三种常见的方法:迭代法、递归法和使用栈。

1. 迭代法:

迭代法是一种常见且容易理解的方法,通过遍历链表将节点指针指向前一个节点来反转链表。

public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode curr = head;
    while (curr != null) {
        ListNode nextTemp = curr.next;
        curr.next = prev;
        prev = curr;
        curr = nextTemp;
    }
    return prev;
}

2. 递归法:

递归法是一种基于递归的方法,通过不断调用自身函数来反转链表。

public ListNode reverseList(ListNode head) {
    if (head == null || head.next == null) {
        return head;
    }
    ListNode p = reverseList(head.next);
    head.next.next = head;
    head.next = null;
    return p;
}

3. 使用栈:

使用栈的思路是先将链表中所有节点入栈,然后依次弹出节点并重新连接起来。

public ListNode reverseList(ListNode head) {
    Stack<ListNode> stack = new Stack<>();
    ListNode p = head;
    while (p != null) {
        stack.push(p);
        p = p.next;
    }
    if (stack.isEmpty()) {
        return null;
    }
    ListNode newHead = stack.pop();
    ListNode q = newHead;
    while (!stack.isEmpty()) {
        ListNode node = stack.pop();
        q.next = node;
        q = q.next;
    }
    q.next = null;
    return newHead;
}

总结:

以上是三种常见的链表反转的实现方法,它们分别是迭代法、递归法和使用栈。迭代法是最常见且简单的方法,递归法代码简洁但可能会导致堆栈溢出,使用栈需要额外的空间。具体选择哪种方法取决于实际需求和效率要求。