剑指Offer_编程题_从尾到头打印链表
2020-04-06 16:03:14来源:博客园 阅读 ()
剑指Offer_编程题_从尾到头打印链表
剑指Offer_编程题_从尾到头打印链表题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。答案
有三种思路,
第一就是利用栈先入后出的特性完成,
第二就是存下来然后进行数组翻转。
第三是利用递归。
// 数组反转实现方式
作者:小辉哥哥链接:https://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035?f=discussion
来源:牛客网
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list=new ArrayList<Integer>();
ListNode pre=null;
ListNode next=null;
while(listNode!=null){
next=listNode.next;
listNode.next=pre;
pre=listNode;
listNode=next;
}
while(pre!=null){
list.add(pre.val);
pre=pre.next;
}
return list;
}
} 链接:https://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035?f=discussion
来源:牛客网
java 递归超简洁版本
public
class
Solution {
ArrayList<Integer> arrayList=
new
ArrayList<Integer>();
public
ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if
(listNode!=
null
){
this
.printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
}
return
arrayList;
}
}
创建链表相关,头插法和尾插法
关于头插法,可以next可以理解成前一个节点地址,插入顺序:
1、头节点传入,开始创建A数据,头节点的next指向A数据的内存地址,A节点的next替换成头节点的
2、头节点再传入,创建B数据,头节点的next又换成了指向B的内存地址,B节点的next替换头节点的A;
总结一下:插入时候,一直在头节点的上面插入数据,原来的数据被“顶”上去了;
头插法遍历的时候,头节点开始,一个一个往上遍历。这样最后插入的就作为第一个输出出来了;
尾插法编练插入,比较好理解,就是一直在“尾巴”追加,遍历时候从头开始,第一个插入的就第一个输出出来;
public class Test {
static Node headNode;
class Node {
private Node next;//指针
private int data;//数据域
}
//尾插法创建单链表 队列形式先进先出
public void back(Node node, int data) {
if (data < 10) {
Node next = new Node();
next.data = data;
next.next = null;
node.next = next;
back(next, ++data);
}
}
//头插法创建单链表 栈形式先进后出
public void head(Node node, int data) {
if (data < 10) {
Node next = new Node();
next.next = node.next;
next.data = data;
node.next = next;
System.out.println("递归参数:" + node.data);
head(node, ++data);
}
}
public static void main(String[] args) {
Test test = new Test();
headNode = test.new Node();//头指针
// new Test().back(headNode, 0);//前插法
new Test().head(headNode, 0);//后插法
System.out.println("创建后的链表是:");//0 1 2 3 4 5 6 7 8 9 10
while (headNode.next != null) {
headNode = headNode.next;
System.out.print(headNode.data + " ");
}
}
}
//————————————————
//版权声明:本文为CSDN博主「另一个绝影」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
//原文链接:https://blog.csdn.net/weixin_37817685/article/details/83305972
原文链接:https://www.cnblogs.com/liran123/p/12641478.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:JDBC-02
- 因为命名被diss无数次。简单聊聊编程最头疼的事情之一:命名 2020-06-10
- Java3个编程题整理 2020-06-09
- (易忘篇)java基础编程难点4 2020-06-08
- 终于拿到了美团offer了,没有辜负了这三个月的努力啊 2020-06-06
- (易忘篇)java基础编程难点3 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash