鍊錶的建立及反轉

2021-06-23 09:52:45 字數 797 閱讀 1347

今天寫了下鍊錶,主要是反轉,用的遞迴寫,先貼上**:

鍊錶建立:

struct listnode;

listnode* build(int arr, size_t size)

else

}/*while(phead)

printf("\n");*/

return phead;

}

反**

listnode *nb;

void exchange(listnode *a, listnode *b)

void list_reverse(listnode *la, listnode *lb, int pos, int mid, bool odd)

// size = 0 ? size = 1 ? 在進入函式前判斷 size >= 2

else

}

註解:宣告乙個全域性變數,用在遞迴裡面,這樣不需要節點的父指標,利用遞迴的堆疊儲存變數(listnode *la),回溯的時候就能直接使用。

空間複雜度 o(1)

時間複雜度 o(n)

可能的bug: 如果鍊錶節點有100w+,可能會棧溢位。 需要其他方法 !

方法2:

listnode* list_reverse(listnode *phead)

return ppre;

}

這種寫法不容易出錯。在鍊錶鏈結是不能斷,而且必須保證到達最後乙個節點。

反轉鍊錶 遞迴及遍歷

兩種方法 思路 在反轉當前節點之前先反轉後續節點。這樣從頭結點開始,層層深入直到尾結點才開始反轉指標域的指向。簡單的說就是從尾結點開始,逆向反轉各個結點的指標域指向。head 是前一結點的指標域 ps 前一結點的指標域指向當前結點 rehead 是反轉後新鍊錶的頭結點 即原來單鏈表的尾結點 思路 遞...

鍊錶 反轉鍊錶

問題 兩兩交換鍊錶中的節點 問題 k 個一組翻轉鍊錶 問題鏈結 利用棧先進後出的特性,遍歷鍊錶,將每個結點加入棧中,最後進行出棧操作,先出棧的結點指向臨近的後出棧的結點。definition for singly linked list.struct listnode class solution ...

反轉鍊錶與分組反轉鍊錶

經典的反轉鍊錶,先上 public class listnode public class printlist system.out.println public class reverse public listnode reverse listnode root listnode pre nul...