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,递归涉及到方法的调用,在性能上也弱于循环的实现
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔