简单链表的复制
题目形容
输出一个简单链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个非凡指针 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;
}
}
【每日寄语】脚步不停,初心不变。