兩種方法:
思路:在反轉當前節點之前先反轉後續節點。這樣從頭結點開始,層層深入直到尾結點才開始反轉指標域的指向。簡單的說就是從尾結點開始,逆向反轉各個結點的指標域指向。
head:是前一結點的指標域(ps:前一結點的指標域指向當前結點)
rehead:是反轉後新鍊錶的頭結點(即原來單鏈表的尾結點)
思路:遞迴反轉法是從後往前逆序反轉指標域的指向,而遍歷反轉法是從前往後反轉各個結點的指標域的指向。
也就是說在反轉當前結點指標指向前,先把當前結點的指標域用tmp臨時儲存,以便下一次使用,
其過程可表示如下:
per:上一結點
cur: 當前結點
tmp: 臨時結點,用於儲存當前結點的指標域(即下一結點)
import xiecheng.node;
public class pro16_linklistreverse
// 呼叫反轉方法
head = reverse2(head);
system.out.println("\n****************");
while (null != head)
} //遞迴法
private static node reverse1(node head)
node rehead = reverse1(head.getnext());// 先反轉後續節點head.getnext()
head.getnext().setnext(head);// 將當前結點的指標域指向前一結點
head.setnext(null);// 前一結點的指標域令為null;
return rehead;// 反轉後新鍊錶的頭結點
} //遍歷反轉法:
private static node reverse2(node head)
// 最後將原鍊錶的頭節點的指標域置為null,還回新鍊錶的頭結點,即原鍊錶的尾結點
head.setnext(null);
return pre;
}}
遞迴(鍊錶反轉)
將乙個單鏈表反轉,結果得到的是鍊錶的最後乙個,以及第乙個。確實是反轉了,但是只剩下兩個元素了。public static node reversenode node node node newheadnode reversenode node.getnext node.setnext null ne...
遞迴控制 鍊錶反轉
1.反轉思路 2.j a 實現 鍊錶反轉的意思是將1 2 3 4 5 null反轉為5 4 3 2 1 null 反轉鍊錶的遞迴思路如下 假設2345這一段鍊錶能夠反轉成功,則只需將1 2345的指標改為2345 1,然後1 null即可 以此類推,即可求得反轉鍊錶 2.1 結點和建立鍊錶的實現 結...
反轉鍊錶(非遞迴,哨兵,遞迴)
給你單鏈表的頭節點 head 和兩個整數 left 和 right 其中 left right 請你反轉從位置 left 到位置 right 的鍊錶節點,返回 反轉後的鍊錶 非遞迴解法 反轉cur.next cur.next pre pre cur cur next next cur.next 新建...