JZ-025-复杂链表的复制
复杂链表的复制 题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,代码
【JZ-025-复杂链表的复制】题目链接: 复杂链表的复制
- 并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
/**
* 标题:复杂链表的复制
* 题目描述
* 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针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;
}
}
【每日寄语】 脚步不停,初心不变。
推荐阅读
- MybatisPlus使用queryWrapper如何实现复杂查询
- leetcode|leetcode 92. 反转链表 II
- 世外小学惨案后,和孩子聊聊世界的“复杂”
- LeetCode|LeetCode 876. 链表的中间结点
- 【过马路的时候】(稍微写复杂点他们就看不懂)
- 纯非纯之复杂!
- redis|redis 链表
- 奥特曼变得越来越复杂
- C语言数据结构之二叉链表创建二叉树
- 错综复杂的人际关系,一张图谱一目了然