实现链表反转的函数
发布时间: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;
}
以上是链表反转的实现方法。通过迭代和递归两种方式,可以对链表进行反转操作。
