劍指Offer之 複雜鍊錶的複製

2021-07-02 07:02:39 字數 1187 閱讀 2569

複雜鍊錶中,每個結點除了有乙個m_pnext指標指向下乙個結點外,還有乙個m_psibling指向鍊錶中的任意結點或者null。實現乙個函式可以複製這個複雜鍊錶。

先正常複製乙個結點,並把這個複製的結點置於當前結點後面。

其後,再複製鍊錶結點的m_psibling指標,由前乙個結點求出它的m_psibling,則新結點的m_psibling就是它的m_psibling結點的下乙個結點。

最後把兩個鍊錶分離開。

#include#include using namespace std;

struct complexlistnode

complexlistnode(int x):m_nvalue(x),m_pnext(null),m_psibling(null){}

};//功能:複雜鍊錶的複製

//鍊錶結點有另外乙個指標m_psibling指向後面的某個結點或者為空,複製一次這個複雜的鍊錶

//思路:先正常複製乙個結點,並把這個複製的結點置於當前結點後面

//其後,再複製鍊錶結點的m_psibling指標,由前乙個結點求出它的m_psibling,則新結點的m_psibling就是它的m_psibling結點的下乙個結點

//最後把兩個鍊錶分離開

//時間複雜度:o(n)

void connectsiblingnodes(complexlistnode *phead);

//先複製這個結點並連線到當前結點後面,原來的鍊錶長度變為2倍

void clonenodes(complexlistnode *phead)

connectsiblingnodes(phead);

}//求出新建立的鍊錶的m_psibling指標

void connectsiblingnodes(complexlistnode *phead)

}//把整個鍊錶分開成兩個相同的鍊錶,並返回新鍊錶的頭結點

complexlistnode * reconnectnodes(complexlistnode *phead)

while(pclonednode->m_pnext)

return pclonedhead;

}complexlistnode * clone(complexlistnode *phead)

int main()

return 0;

}

劍指Offer之複雜鍊錶的複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 鍊錶的結構大體如下 真正的難點在於怎樣複製這個random的結構。參考了dalao提出的思...

劍指offer 之複雜鍊錶的複製

複雜鍊錶的複製 思路 1.先迴圈一遍,把原鍊錶的各個元素複製一遍連成串 2.再迴圈一遍,複製原鍊錶的隨機指標,在新鍊錶中指向對應元素 3.最後迴圈一遍,把原煉表和新鍊錶解鏈 coding utf 8 class randomlistnode def init self,x self.label x ...

(十八)劍指offer之複雜鍊錶的複製

題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意 輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空。struct randomlistnode class solution pri...