程式設計開發教程:反轉鍊錶,兩種方法:
遞迴法思路:在反轉當前節點之前先反轉後續節點。這樣從頭結點開始,層層深入直到尾結點才開始反轉指標域的指向。簡 單的說就是從尾結點開始,逆向反轉各個結點的指標域指向。
head:是前一結點的指標域(ps:前一結點的指標域指向當前結點)
head.getnext():是當前結點的指標域(ps:當前結點的指標域指向下一結點)
rehead:是反轉後新鍊錶的頭結點(即原來單鏈表的尾結點)
遍曆法思路:遞迴反轉法是從後往前逆序反轉指標域的指向,而遍歷反轉法是從前往後反轉各個結點的指標域的指向。
基本思路是:將當前節點cur的下乙個節點cur .getnext()快取到temp後,然後更改當前節點指標指向上一結點pre。
也就是說在反轉當前結點指標指向前,先把當前結點的指標域用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;
}}
程式設計開發習題反轉鍊錶問題解析
程式設計開發習題反轉鍊錶問題解析 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。解 先定義乙個last指標,用來指向phead指標的下乙個結點 然後x0結點應該指向none,也就是phead.next last,它會成為我們反轉之後的最後乙個結點,讓last指向x0 last phead,phead...
就地鍊錶反轉 常見程式設計模式之就地反轉鍊錶
在很多問題中,我們需要對乙個鍊錶中的節點連線進行反轉,且通常需要原地進行,即不能使用額外的儲存空間。這時我們可以使用就地反轉鍊錶模式,該模式本質上是一種迭代解法,流程如下圖所示。首先設定乙個變數current指向鍊錶頭部,以及另乙個變數previous指向當前處理節點的前乙個節點。下一步我們需要將當...
鍊錶 反轉鍊錶
問題 兩兩交換鍊錶中的節點 問題 k 個一組翻轉鍊錶 問題鏈結 利用棧先進後出的特性,遍歷鍊錶,將每個結點加入棧中,最後進行出棧操作,先出棧的結點指向臨近的後出棧的結點。definition for singly linked list.struct listnode class solution ...