java 實(shí)現(xiàn)單鏈表逆轉(zhuǎn)詳解及實(shí)例代碼
java 實(shí)現(xiàn)單鏈表逆轉(zhuǎn)詳解
實(shí)例代碼:
class Node {
Node next;
String name;
public Node(String name) {
this.name = name;
}
/**
* 打印結(jié)點(diǎn)
*/
public void show() {
Node temp = this;
do {
System.out.print(temp + "->");
temp = temp.next;
}while(temp != null);
System.out.println();
}
/**
* 遞歸實(shí)現(xiàn)單鏈表反轉(zhuǎn),注意:?jiǎn)捂湵磉^長(zhǎng),會(huì)出現(xiàn)StackOverflowError
* @param n
* @return
*/
public static Node recursionReverse(Node n) {
long start = System.currentTimeMillis();
if(n == null || n.next == null) {
return n;
}
Node reverseNode = recursionReverse(n.next);
n.next.next = n;
n.next = null;
System.out.println("遞歸逆置耗時(shí):" + (System.currentTimeMillis() - start) + "ms...");
return reverseNode;
}
/**
* 循環(huán)實(shí)現(xiàn)單鏈表反轉(zhuǎn)
* @param n
* @return
*/
public static Node loopReverse(Node n) {
long start = System.currentTimeMillis();
if(n == null || n.next == null) {
return n;
}
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("循環(huán)逆置耗時(shí):" + (System.currentTimeMillis() - start) + "ms...");
return pre;
}
@Override
public String toString() {
return name;
}
public static void main(String[] args) {
int len = 10;
Node[] nodes = new Node[len];
for(int i = 0; i < len; i++) {
nodes[i] = new Node(i + "");
}
for(int i = 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();
}
}
總結(jié)
對(duì)于遞歸和循環(huán),推薦使用循環(huán)實(shí)現(xiàn),遞歸在單鏈表過大時(shí),會(huì)出現(xiàn)StatckOverflowError,遞歸涉及到方法的調(diào)用,在性能上也弱于循環(huán)的實(shí)現(xiàn)
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
詳解Spring的autowire-candidate設(shè)計(jì)
現(xiàn)在的Spring應(yīng)用通常都是基于注解開發(fā),但是對(duì)Spring感興趣的同學(xué)可以借助Spring早期基于Xml配置的各種運(yùn)用來加深對(duì)Spring框架內(nèi)部的理解和體會(huì)Spring框架的設(shè)計(jì)之妙。這篇文章我們就來談?wù)刋ml配置之default-autowire-candidates2021-06-06
Spring用代碼來讀取properties文件實(shí)例解析
這篇文章主要介紹了Spring用代碼來讀取properties文件實(shí)例解析,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
spring cloud gateway整合sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流
這篇文章主要介紹了spring cloud gateway整合sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
關(guān)于Java?float和double精度范圍大小
這篇文章主要介紹了關(guān)于Java?float和double精度范圍大小,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

