从尾到头打印链表
问题描述:从尾到头打印链表。
首先,我们先说一下,这道题目的两种做法:一是递归,二是堆栈。
本方法思想:
递归方法:递归的打印当前节点的下一个节点,但是这种方法当链表太多的时候,调用深度过深,速度很慢。
堆栈方法:遍历一个节点加入堆栈,遍历完成出栈,利用了栈的先进后出的数据结构思想
持续更新...
代码附下
Java实现:
1、递归方法:
package 从尾到头打印链表;
/**
* 先打印node.next,再打印自己,递归下去
* @author user
*不适合链表太多的情况,调用深度过深
*/
class ListNode {
int data;
ListNode next;
public ListNode(int data) {
// TODO Auto-generated constructor stub
this.data = data;
}
}
public class 递归方式 {
public static void main(String args[]) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
node1.next = node2;
node2.next = node3;
printListReverse(node1);
}
public static void printListReverse(ListNode headNode) {
if (headNode != null) {
if (headNode.next != null) {
printListReverse(headNode.next);
}
System.out.println(headNode.data);
}
}
}
2、堆栈方法:
package 从尾到头打印链表;
/**
* 遍历一个加入堆栈,遍历完成出站
* @author user
*/
import java.util.Stack;
class ListNode2 {
int data;
ListNode2 next;
public ListNode2(int data) {
// TODO Auto-generated constructor stub
this.data = data;
}
}
public class 堆栈方式 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ListNode2 node1 = new ListNode2(1);
ListNode2 node2 = new ListNode2(2);
ListNode2 node3 = new ListNode2(3);
node1.next = node2;
node2.next = node3;
printStack(node1);
}
private static void printStack(ListNode2 head) {
// TODO Auto-generated method stub
Stack<ListNode2> stack = new Stack<ListNode2>();
while (head != null) {
stack.push(head);
head = head.next;
}
while (!stack.isEmpty()) {
System.out.println(stack.pop().data);
}
}
}
持续更新...欢迎赞赏!
https://blog.csdn.net/ustcer_93lk/article/details/80367506
如果有问题,欢迎大家留言,有更好的方法也期待大家告知。