剑指 Offer 06. 从尾到头打印链表
这道题目比较简单,两种解题方法都是可以想出来的,代码部分就没有写注释哦,水一道题目😋
题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
解题方法一
/**
* 首先遍历链表得到长度,然后创建一定长度数组,最后再次遍历链表,同时将节点存入数组 数组从后往前存放
* 注意 链表为空返回的是[] 而不是null
* @param head
* @return
*/
public int[] reversePrint(ListNode head) {
// TMD 如果为空返回[]!!
// if (head == null){
// return null;
// }
int listLen = 0;
ListNode cur = head;
while (cur != null){
listLen++;
cur = cur.next;
}
int[] resultArr = new int[listLen];
for (int i = listLen - 1; i >=0 ; i--) {
resultArr[i] = head.val;
head = head.next;
}
return resultArr;
}
解题方法二
/**
* 使用栈结构 先进后出特点 依次压栈然后依次弹栈存放数组中
* 时间复杂度:O(n)。正向遍历一遍链表,然后从栈弹出全部节点,等于又反向遍历一遍链表。
* 空间复杂度:O(n)。额外使用一个栈存储链表中的每个节点。
*
* @param head
* @return
*/
public int[] reversePrint2(ListNode head) {
Stack<Integer> stack = new Stack<>();
while (head != null){
stack.add(head.val);
head = head.next;
}
int[] resultArray = new int[stack.size()];
for (int i = 0; i < resultArray.length; i++) {
resultArray[i] = stack.pop();
}
return resultArray;
}
微信关注
本站为非盈利性站点,所有资源、文章等仅供学习参考,并不贩卖软件且不存在任何商业目的及用途,如果您访问和下载某文件,表示您同意只将此文件用于参考、学习而非其他用途。
本站所发布的一切软件资源、文章内容、页面内容可能整理来自于互联网,在此郑重声明本站仅限用于学习和研究目的;并告知用户不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
如果本站相关内容有侵犯到您的合法权益,请仔细阅读本站公布的投诉指引页相关内容联系我,依法依规进行处理!
作者:理想
链接:https://www.imyjs.cn/archives/552
本站所发布的一切软件资源、文章内容、页面内容可能整理来自于互联网,在此郑重声明本站仅限用于学习和研究目的;并告知用户不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
如果本站相关内容有侵犯到您的合法权益,请仔细阅读本站公布的投诉指引页相关内容联系我,依法依规进行处理!
作者:理想
链接:https://www.imyjs.cn/archives/552
THE END
0
二维码


剑指 Offer 06. 从尾到头打印链表
这道题目比较简单,两种解题方法都是可以想出来的,……

文章目录
关闭

共有 0 条评论