题目:
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
链表的结点定义如下:
struct ListNode{
int m_nKey;
ListNode* m_pNext;
}
第一思路:
我的第一思路是从头到尾输出类比数组那样,于是乎想把链表中的链表结点的指针反转过来,改变链表的方向,然后实现从头到尾输出(结果为从尾到头输出),可是发现修改链表的指针,反转链表的结构比较麻烦。于是乎放弃。(改变链表的方向也是需要遍历一次链表然后修改每个链表的指针域)
最优解思路:
借助于栈:我们从头到尾遍历链表,可以把遍历的结果放入栈中(先进后出),这样输出栈就实现了从尾到头输出链表元素。
public static void printListReversinglyByStack(ListNode listNode){
if(listNode == null){ //如果为空,直接返回
return;
}
Stack<Integer> stack = new Stack<Integer>(); //借助于栈
while(listNode!=null){
stack.push(listNode.data); //将数据放入栈中
listNode = listNode.next; //指针域指向下一个指针
}
while(!stack.isEmpty()){
System.out.print(stack.