反轉鍊錶 遞迴及遍歷

2021-09-30 13:41:48 字數 1037 閱讀 5323

兩種方法:

思路:在反轉當前節點之前先反轉後續節點。這樣從頭結點開始,層層深入直到尾結點才開始反轉指標域的指向。簡單的說就是從尾結點開始,逆向反轉各個結點的指標域指向。

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 新建...