关于java:JZ025复杂链表的复制

简单链表的复制

题目形容

输出一个简单链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个非凡指针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;
    }
}


【每日寄语】 脚步不停,初心不变。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理