程式設計開發教程 反轉鍊錶

2022-09-23 20:57:28 字數 1152 閱讀 3484

程式設計開發教程:反轉鍊錶,兩種方法:

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

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