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