##题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
##解题思路
第一步,原样复制,每一个复制的节点跟在原节点后边
第二步,确定复制节点的任意指向
第三步,拆分长链表为原链表和复制链表
##代码实现

/**
 * 
 */
package 链表;

/**
 * <p>
 * Title:RandomListNodeClone
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author 田茂林
 * @data 2017年8月22日 下午4:06:59
 */
class RandomListNode {
	int label;
	RandomListNode next = null;
	RandomListNode random = null;

	RandomListNode(int label) {
		this.label = label;
	}
}

public class RandomListNodeClone {
	public RandomListNode Clone(RandomListNode pHead) {
		if(pHead==null){
			return null;
		}
         //第一步,原样复制,每一个复制的节点跟在原节点后边
		RandomListNode p = pHead;
		while(p!=null){
			RandomListNode clone = new RandomListNode(p.label);
			clone.next = p.next;  //先把后边接上
			p.next = clone;//接全了
			p = clone.next;  //指针移位到下一个旧节点
			
		}
		p = pHead;
		//第二步,确定复制节点的任意指向
		while(p!=null){
			if(p.random!=null){
				p.next.random = p.random.next;   //复制节点的任意指向就是原节点任意指向的下一个。
			}
			p=p.next.next;//p移动到下一个旧节点。
		}
		//第三步,拆分长链表为原链表和复制链表
		RandomListNode head = pHead.next;
		RandomListNode cur = head;
		p = pHead;
		while(p!=null){
			p.next = p.next.next;
			if(cur.next!=null){
				cur.next = cur.next.next;
			}
			p = p.next;
			cur=cur.next;
		}
		return head;
    
	}
}