Java函数如何实现单链表的反转操作?
发布时间:2023-06-16 10:20:19
单链表是一种常见的数据结构,它由若干个节点组成,每个节点中包含一个数据元素和指向下一个节点的指针。链表的优点是插入、删除等操作比较方便,但访问某个节点需要遍历整个链表,效率比较低。
单链表的反转操作是指将链表中的节点顺序颠倒过来,例如原链表为1->2->3->4,反转后的链表为4->3->2->1。
下面介绍两种Java函数实现单链表反转操作的方法。
方法一:迭代法
迭代法是实现单链表反转操作的一种常用方法,具体思路是从第一个节点开始,每次将当前节点的指针指向前一个节点,直到遍历完整个链表。在迭代过程中需要记录当前节点、前一个节点和下一个节点三个指针。
Java代码如下:
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
该函数的时间复杂度是O(n),其中n为链表的节点数。
方法二:递归法
递归法是另一种实现单链表反转操作的方法,具体思路是先对链表的一部分进行反转操作,然后逐步扩大范围,直到整个链表都被反转。在递归过程中需要记录当前节点和下一个节点两个指针。
Java代码如下:
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;
}
该函数的时间复杂度也是O(n),但由于递归需要消耗额外的函数调用栈空间,因此在链表比较长的情况下会有栈溢出的风险。因此,迭代法是更加稳妥的实现方式。
