劍指offer:複雜連結串列的複製(java)
阿新 • • 發佈:2019-02-11
public class Solution { public ComplexListNode Clone(ComplexListNode pHead) { if(pHead == null){ return null; } //複製接結點 CloneNodes(pHead); //連線隨機指標 ConnectSiblingNodes(pHead); //拆分連結串列 return ReconnectNodes(pHead); } public static void CloneNodes(ComplexListNode pHead){ ComplexListNode pNode = pHead; while(pNode != null){ ComplexListNode pCloned = new ComplexListNode(pNode.label); pCloned.m_pnext = pNode.m_pnext; pCloned.m_pSibling = null; pNode.m_pnext = pCloned; pNode = pCloned.m_pnext; } } public static void ConnectSiblingNodes(ComplexListNode pHead){ RandomListNode pNode = pHead; while(pNode != null){ ComplexListNode pCloned = pNode.m_pnext; if(pNode.m_pSibling != null){ pCloned.m_pSibling = pNode.m_Sibling.m_pnext; } pNode = pCloned.m_pnext; } } public static ComplexListNode ReconnectNodes(ComplexListNode pHead){ ComplexListNode pNode = pHead; ComplexListNode pClonedHead = null; ComplexListNode pClonedNode = null; if(pNode != null){ pClonedHead = pClonedNode = pNode.m_pnext; pNode.m_pnext = pClonedNode.m_pnext; pNode = pNode.m_pnext; } while(pNode != null){ pClonedNode.m_next = pNode.m_next; pClonedNode = pClonedNode.m_pnext; pNode.m_pnext = pClonedNode.m_pnext; pNode = pNode.m_pnext; } return pClonedHead; } }