最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
java 实现单链表逆转详解及实例代码
时间:2022-06-29 01:35:57 编辑:袖梨 来源:一聚教程网
java 实现单链表逆转详解
实例代码:
| 代码如下 | 复制代码 |
classNode { Node next; String name; publicNode(String name) { this.name = name; }
/** * 打印结点 */ publicvoidshow() { Node temp =this; do{ System.out.print(temp +"->"); temp = temp.next; }while(temp !=null); System.out.println(); }
/** * 递归实现单链表反转,注意:单链表过长,会出现StackOverflowError * @param n * @return */ publicstaticNode recursionReverse(Node n) { longstart = System.currentTimeMillis(); if(n ==null|| n.next ==null) { returnn; } Node reverseNode = recursionReverse(n.next);
n.next.next = n; n.next =null; System.out.println("递归逆置耗时:"+ (System.currentTimeMillis() - start) +"ms..."); returnreverseNode; }
/** * 循环实现单链表反转 * @param n * @return */ publicstaticNode loopReverse(Node n) { longstart = System.currentTimeMillis(); if(n ==null|| n.next ==null) { returnn; }
Node pre = n; Node cur = n.next; Node next =null; while(cur !=null) { next = cur.next; cur.next = pre; pre = cur; cur = next; } n.next =null; n = pre; System.out.println("循环逆置耗时:"+ (System.currentTimeMillis() - start) +"ms..."); returnpre; }
@Override publicString toString() { returnname; }
publicstaticvoidmain(String[] args) {
intlen =10; Node[] nodes =newNode[len]; for(inti =0; i < len; i++) { nodes[i] =newNode(i +""); } for(inti =0; i < len -1; i++) { nodes[i].next = nodes[i+1]; } /* try { Thread.sleep(120000); } catch (InterruptedException e) { e.printStackTrace(); }*/ Node r1 = Node.loopReverse(nodes[0]); r1.show(); Node r = Node.recursionReverse(r1); r.show();
} } | |
总结
对于递归和循环,推荐使用循环实现,递归在单链表过大时,会出现StatckOverflowError,递归涉及到方法的调用,在性能上也弱于循环的实现
相关文章
- poki免费游戏在线畅玩入口-poki小游戏即点即玩全免费 12-17
- 夸克浏览器网页版极速下载入口-夸克网页版无痕浏览模式一键直达 12-17
- 洛克王国世界幻影屋副本如何通关 12-17
- 崩坏星穹铁道海瑟音有什么培养方法 12-17
- 漫蛙漫画正版官方网页端入口网址 12-17
- 逆战未来黄沙风暴怎么获取 12-17