简述Java实现逆序打印链表 ?
参考答案:
逆序打印链表是一个常见的链表操作。在Java中,你可以通过递归或迭代的方式来实现这个功能。下面我会给出两种方法来实现逆序打印链表。
方法一:递归
在递归方法中,你可以定义一个递归函数,该函数接收一个链表节点作为参数,并在递归到链表的尾部时开始打印。
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class Solution {
public void printListFromTailToHead(ListNode listNode) {
if (listNode == null) {
return;
}
printListFromTailToHead(listNode.next);
System.out.print(listNode.val + " ");
}
}
在这个例子中,printListFromTailToHead
函数首先检查链表节点是否为空。如果不为空,它会递归地调用自己,参数是下一个节点。然后,它打印当前节点的值。由于递归的特性,这个函数会先打印链表的尾部,然后逐步打印到头部,实现了逆序打印。
方法二:迭代
在迭代方法中,你可以使用栈来实现逆序打印。栈是一种后进先出(LIFO)的数据结构,非常适合用来逆序处理链表。
import java.util.Stack;
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class Solution {
public void printListFromTailToHead(ListNode listNode) {
Stack<Integer> stack = new Stack<>();
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
while (!stack.isEmpty()) {
System.out.print(stack.pop() + " ");
}
}
}
在这个例子中,printListFromTailToHead
函数首先创建一个空栈。然后,它遍历链表,将每个节点的值压入栈中。由于栈是后进先出的,因此最后压入栈的值会最先被弹出,从而实现了逆序打印。最后,函数遍历栈,打印出每个值。
学习笔记
0 学习笔记