题目:
题:输入一个链表的头节点,从尾到头打印链表每个节点的值
知识点:
- 链表的基本知识,节点的2个属性(value、next);
- 栈的基本使用:创建空栈、pop、empty、push等;参考:https://blog.csdn.net/qq_42124842/article/details/91420306
- 递归的本质:栈结构,将复杂的问题分成小问题去解决;参考:https://blog.csdn.net/bobbypollo/article/details/79891556
- 静态static:参考:https://baijiahao.baidu.com/s?id=1636927461989417537&wfr=spider&for=pc
- 静态方法只能访问静态成员(非静态即可访问静态也可非静态)
- 静态方法中不能用this,super(静态方法是类变量,不是实例变量)
- 主函数是静态的;
注意:
无
代码实现:
- 栈方法
- 递归思想
public class Num06 {
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(3);
ListNode node3 = new ListNode(5);
node1.add(node2);
node1.add(node3);
printListFromTail2Head1(node1);
printListFromTail2Head2(node1);
}
//节点类
public static class ListNode{
int value;
ListNode next;
public ListNode(int value) {
this.value = value;
}
//链表末尾加节点
public void add(ListNode node) {
ListNode currentnode = this;
//判断是否是最后一个节点
while (currentnode.next != null) {
currentnode = currentnode.next;
}
//将node放入最后一个节点后面
currentnode.next = node;
return;
}
}
/**
* 倒叙打印链表(栈方法)
* @param listNode
* @return
*/
public static void printListFromTail2Head1(ListNode listNode) {
//创建空栈,将链表的值依次送入
Stack<Integer> stack = new Stack<>();
while(listNode!=null) {
stack.push(listNode.value);
listNode = listNode.next;
}
//将栈中元素依次输出
while(!stack.empty()) {
int i = stack.pop();
System.out.println(i);
}
}
/**
* 倒叙打印链表(递归法)
* @param listNode
*/
public static void printListFromTail2Head2(ListNode listNode) {
//递归至最后一个节点,依次打印
if(listNode.next!=null) {
printListFromTail2Head2(listNode.next);
}
System.out.println(listNode.value);
}
}
知识点(C++):
- 向vector创建的数组(arr)中加入元素:arr.push_back(a);
- pNode->value,中->的含义
- c++中stack的常用操作:pop()弹出、push()压入、top()输出栈顶,但不删除、size()个数、empty()是否 为空