最新下载
热门教程
- 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,递归涉及到方法的调用,在性能上也弱于循环的实现
相关文章
- 《弓箭传说2》新手玩法介绍 01-16
- 《地下城与勇士:起源》断桥烟雨多买多送活动内容一览 01-16
- 《差不多高手》醉拳龙技能特点分享 01-16
- 《鬼谷八荒》毕方尾羽解除限制道具推荐 01-16
- 《地下城与勇士:起源》阿拉德首次迎新春活动内容一览 01-16
- 《差不多高手》情圣技能特点分享 01-16