今天寫了下鍊錶,主要是反轉,用的遞迴寫,先貼上**:
鍊錶建立:
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...