题解 | #复杂链表的复制#
复杂链表的复制
http://www.nowcoder.com/practice/f836b2c43afc4b35ad6adc41ec941dba
java解
我的思路比较简单,把next指针和random指针分开来赋值,分别进行,第一步只看next指针,因为next指针串起来就可以把所有的节点都重新创建出来。第二部看random指针,那就再重头循环一遍整个链表,判断每个节点的random是否为空,不为空就找random的位置,再使用另外两个tempRe和newTempRe指针重头开始找位置,tempRe循环原来的pHead链表,newTempRe循环复制出来的newHead链表,当判断到tempRe == temp.random时说明找到了该位置,此时newTempRe指向的就是复制出来的newHead链表中的位置,这时只需要将newTempRe赋值给newTemp.random即可
public class Solution { public RandomListNode Clone(RandomListNode pHead) { if(pHead == null) return null; RandomListNode newHead = new RandomListNode(pHead.label); RandomListNode newTemp = newHead; RandomListNode temp = pHead; while(temp.next != null){//将next指针复制完成,所有的节点也都复制完成。 temp = temp.next; newTemp.next = new RandomListNode(temp.label); newTemp = newTemp.next; } newTemp = newHead; temp = pHead; RandomListNode newTempRe = null; RandomListNode tempRe = null; while(temp != null){ if(temp.random != null){ newTempRe = newHead; tempRe = pHead; while(tempRe != temp.random){ tempRe = tempRe.next; newTempRe = newTempRe.next; } newTemp.random = newTempRe; } temp = temp.next; newTemp = newTemp.next; } return newHead; } }