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

实现链表反转的函数

发布时间:2023-07-06 00:23:12

链表反转是常见的数据结构操作问题,可以使用迭代或递归两种方式实现。下面将分别介绍这两种方法。

1. 迭代方法:

迭代方法是通过修改节点的指针改变链表的指向实现反转。

首先定义三个指针:current指向当前要反转的节点,previous指向current的前一个节点,next指向current的下一个节点。

1) 将当前节点的下一个节点保存在next指针中;

2) 将当前节点的指针指向previous,实现反转;

3) 将current指针和previous指针向后移动一个节点;

4) 重复上述步骤直到current指针为空,此时链表反转完成。

以下是用Java代码实现迭代方法的链表反转函数:

public ListNode reverseList(ListNode head) {
    ListNode current = head;
    ListNode previous = null;
    
    while (current != null) {
        ListNode next = current.next;
        current.next = previous;
        previous = current;
        current = next;
    }
    
    return previous;
}

2. 递归方法:

递归方法是通过递归调用反转后续节点的指针,实现链表反转。

递归的终止条件是当前节点或者当前节点的下一个节点为空。终止后,当前节点变为新链表的头节点。

在递归的过程中,假设后面的节点已经反转完成,只需将当前节点指向前一个节点即可。

以下是用Java代码实现递归方法的链表反转函数:

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

以上是链表反转的实现方法。通过迭代和递归两种方式,可以对链表进行反转操作。