原來自己想過乙個思路,後來發現完全是不正確的。
看來最後還是得在網上查詢演算法,最後才實現了。
(1)當鍊表為空表或只有乙個結點時,該鍊錶的逆置鍊錶與原表相同。
(2)當鍊表含2個以上結點時,可將該煉表處理成只含第一結點的帶頭結點鍊錶和乙個無頭結點的包含該鍊錶剩餘結點的鍊錶。然後,將該無頭結點鍊錶中的所有結點順著鍊錶指標,由前往後將每個結點依次從無頭結點鍊錶中摘下,作為第乙個結點插入到帶頭結點鍊錶中。這樣就可以得到逆置的鍊錶
具體實現起來就不是那麼困難了,在紙上面畫畫就出來了~~~
#include #include #define ok 1
#define error 0
#define length 10
typedef int elemtype;
typedef int status;
typedef struct lnode
lnode, *linklist;
//建立鍊錶
status createlist(linklist &l)
return ok;
}//鍊錶逆置
status inverselist(linklist &l)
//將除了頭節點和第乙個節點之外的多餘節點遍歷並將每個節點摘出來放到頭節點的後面
while (q)
return ok;
}//列印鍊錶
status printflist(linklist l)
std::cout<<"第"return ok;
}int main()
鍊錶就地逆置
就地逆置,就是在不借助任何中間變數的情況下,逆置一單鏈表。演算法思路 逆置後的點鍊錶初始為空,表中的節點不是新生成的,而是從原鍊錶當中一次 刪除 再逐個頭插到逆置表中。設逆置鍊錶的初始態為空表,刪除 已知鍊錶中 的第乙個節點,然後將它 插入 到逆置鍊錶的 表頭 即使得他成為逆置鍊錶中 新 的第乙個節...
實驗1 單向鍊錶就地轉置
老師說隨便語言,所以用的是c和c 混用方便一些。1 新建單鏈表 2.依次輸出單鏈表的值 3.就地反轉 4.輸出反轉的鍊錶的值 5.摧毀單鏈表 include include include using std cin using std cout using std endl struct link...
單向鍊錶反轉,就地逆置與遞迴反轉(無表頭結點)
最近在看鍊錶,今天刷到一道鍊錶的反轉題,鍊錶反轉可以說是基礎操作,但是可提供的方案也有很多,簡單通過了該題後又學習了一下遞迴反轉,現在把三種方法都公開出來做乙個總結。1.就地逆置 2.單引數的遞迴逆置 3.雙引數的遞迴逆置 一 就地逆置 方法 頭插。由於這裡是不帶表頭結點的單向鍊錶,所以頭插會稍微複...