牛客(25)复杂链表的复制
// 题目描述 // 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点), // 返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) public static class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null; RandomListNode(int label) { this.label = label; } } // 不会看的别人的思路 public static RandomListNode Clone(RandomListNode pHead) { //保存头节点 RandomListNode newLink = pHead; //复制节点并插入节点 while (newLink != null) { //复制节点 RandomListNode insert = new RandomListNode(newLink.label); //插入被复制的节点后面 insert.next = newLink.next; newLink.next = insert; //指针移动到下一个要复制的节点 newLink = insert.next; } //修改random newLink =pHead; while (newLink != null) { if (newLink.random != null) { newLink.next.random = newLink.random.next; } newLink = newLink.next.next; } // 拆分 RandomListNode clone = new RandomListNode(0); RandomListNode result=clone; newLink =pHead; while (newLink != null) { clone.next=newLink.next; clone=clone.next; newLink.next = newLink.next.next; newLink=newLink.next; // newLink=newLink.next.next;直接返回空 } return result.next; }