简单链表的复制

题目形容

输出一个简单链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个非凡指针random指向一个随机节点),请对此链表进行深拷贝,

  • 并返回拷贝后的头结点。(留神,输入后果中请不要返回参数中的节点援用,否则判题程序会间接返回空)

题目链接: 简单链表的复制

代码

/** * 题目:简单链表的复制 * 题目形容 * 输出一个简单链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个非凡指针random指向一个随机节点),请对此链表进行深拷贝, * 并返回拷贝后的头结点。(留神,输入后果中请不要返回参数中的节点援用,否则判题程序会间接返回空) * 题目链接: * https://www.nowcoder.com/practice/f836b2c43afc4b35ad6adc41ec941dba?tpId=13&&tqId=11178&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking */public class Jz25 {    /**     * 办法:     * 第一步,在每个节点的前面插入复制的节点。     * 第二步,对复制节点的 random 链接进行赋值。     * 第三步,拆分。     *     * @param pHead     * @return     */    public RandomListNode clone(RandomListNode pHead) {        if (pHead == null) {            return null;        }        // 插入新节点        RandomListNode cur = pHead;        while (cur != null) {            RandomListNode clone = new RandomListNode(cur.label);            clone.next = cur.next;            cur.next = clone;            cur = clone.next;        }        // 建设 random 链接        cur = pHead;        while (cur != null) {            RandomListNode clone = cur.next;            if (cur.random != null) {                clone.random = cur.random.next;            }            cur = clone.next;        }        // 拆分        cur = pHead;        RandomListNode pCloneHead = pHead.next;        while (cur.next != null) {            RandomListNode next = cur.next;            cur.next = next.next;            cur = next;        }        return pCloneHead;    }}
【每日寄语】 脚步不停,初心不变。