最新下载
热门教程
- 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,递归涉及到方法的调用,在性能上也弱于循环的实现
相关文章
- 《燕云十六声》配置要求介绍 12-25
- 《燕云十六声》搬砖介绍 12-25
- 时空中的绘旅人天宇之间怎么玩 绘旅人天宇之间活动玩法介绍 12-25
- QQ2024年度报告怎么看 2024qq年度报告玩法介绍 12-25
- 归龙潮珠砂什么时候up 归龙潮红缘绮梦卡池介绍 12-25
- 王者荣耀S38赛季有什么更新 12-25