輸入一個復雜鏈表(每個節點中有節點值,以及兩個指針,一個指向下一個節點,另一個特殊指針指向任意一個節點),返回結果為復制後復雜鏈表的head。(註意,輸出結果中請不要返回參數中的節點引用,否則判題程序會直接返回空)
阿新 • • 發佈:2019-04-21
下一個 註意 public dom next eno style clas lin
/* public class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null; RandomListNode(int label) { this.label = label; } } */
/**
* 根據每個節點n復制其節點為n‘,並放在節點n的後面
*/
public class Solution { public RandomListNode Clone(RandomListNode pHead) { CloneListNode(pHead); ConnectSiblingNode(pHead);return getClone(pHead); }
/**
* 將鏈表拆分
* @param pHead
* @return
*/
public RandomListNode getClone(RandomListNode pHead) { RandomListNode pNode=pHead; RandomListNode pCloneNode = null; RandomListNode pCloneHead = null; if(pNode!=null){ pCloneNode = pCloneHead = pNode.next; //pCloneNode = pNode.next;pNode.next = pCloneNode.next; pNode = pNode.next; } while(pNode!=null){ pCloneNode.next = pNode.next; pCloneNode = pCloneNode.next; pNode.next = pCloneNode.next; pNode = pNode.next; } return pCloneHead; } //復制隨機相連的節點 public void ConnectSiblingNode(RandomListNode pHead) { RandomListNode pNode=pHead; while(pNode!=null){ RandomListNode pCloneNode = pNode.next; if(pNode.random!=null){ pCloneNode.random = pNode.random.next; } pNode = pCloneNode.next; } } //復制直接相連的節點 public void CloneListNode(RandomListNode pHead) { RandomListNode pNode=pHead; while (pNode!=null){ RandomListNode pCloneNode = new RandomListNode(0); pCloneNode.label = pNode.label; pCloneNode.next = pNode.next; // pCloneNode.random = null; //pNode.next = pCloneNode; pNode.next = pCloneNode; pNode = pCloneNode.next; } } }
輸入一個復雜鏈表(每個節點中有節點值,以及兩個指針,一個指向下一個節點,另一個特殊指針指向任意一個節點),返回結果為復制後復雜鏈表的head。(註意,輸出結果中請不要返回參數中的節點引用,否則判題程序會直接返回空)