初夏小談 交換鍊錶結點(鍊錶高階操作)

2021-09-02 18:52:22 字數 746 閱讀 2261

交換兩個鍊錶中的結點,就是要將要交換的兩個結點改變,而其它結點不變。

交換兩個結點,就要找到它的前乙個結點,將前乙個結點的next改為另乙個要交換的結點的位址即可,但是這樣交換,那麼交換得結點及它後的所有結點會全部接到另乙個結點,所以再標記兩個結點(即兩個結點後面的結點),這樣就可以方便的進行交換的後續操作。

ok**如下:

//2.交換兩個鍊錶中的結點

引入四個指標法

void swaplinklist(linklist* first1, datatype data1, linklist* first2, datatype data2)

else

}else if (first1->head->data == data1 && first2->head->data != data2)

else if (first1->head->data != data1 && first2->head->data == data2)

else

}

這道題的難點在於對鍊錶第乙個結點的交換。(作者使用頭指標方式)所以對鍊錶第乙個結點進行考慮。如果你想交換乙個鍊錶中的兩個結點,只需將引數中第二個指標改為第乙個指標即可。

珍&原始碼

初夏小談 複雜鍊錶的複製

在鍊錶的中有這樣一類鍊錶。它至少包含兩個指標。其中乙個指向下乙個結點。有乙個指標隨機的指向鍊錶的其它結點,也可能指向它自己,也可能指向null。對於該類鍊錶的複製來說。最大的難度就是如何處理複製的新鍊錶的這個隨機指標指向的問題。因此在對該類煉表處理時,就必須根據源鍊錶的指標指向來得到新鍊錶的隨機指標...

鍊錶 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。知識點回顧 快慢指標 思路 使用快慢指標 假設有p,q兩指標,p每步跨乙個結點,q每步跨兩個結點。那麼經過k步之後q比p多走過的結點數為k。如果鍊錶中沒有環,那麼q永遠在p的前面,兩指標不會相遇。如果鍊錶有環,且環中結點個數為...

鍊錶 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null 鍊錶中某些結點構成了乙個環,找打環的入口結點 head a1 a2 a3.使用雙層迴圈,例如對於結點a1,遍歷整個鍊錶判斷是否有a1 head next head head next a2,a3,an 依次 測試報錯,沒通過 ...