public RandomListNode Clone(RandomListNode pHead)
{
if(pHead==null) return null;
//将新链表每个节点插在旧链表对应的每个节点后面
RandomListNode oldNode = pHead;
while(oldNode!=null)
{
RandomListNode node = new RandomListNode(oldNode.label);
node.next = oldNode.next;
oldNode.next = node;
oldNode = oldNode.next.next;
}
//将新链表每个节点的random指向自己前一个节点的random的下一个节点
oldNode = pHead;
while(oldNode!=null)
{
if(oldNode.random!=null)
oldNode.next.random = oldNode.random.next;
oldNode = oldNode.next.next;
}
//将链表根据奇偶分成旧新链表
oldNode = pHead;
RandomListNode head = oldNode.next;
RandomListNode node = head;
while(oldNode!=null)
{
RandomListNode oldNext = oldNode.next.next;
if(oldNext!=null)
node.next = oldNext.next;
oldNode.next = oldNext;
oldNode = oldNode.next;
if(oldNode!=null)
node = oldNode.next;
}
return head;
}
35、复杂链表的赋值
最新推荐文章于 2022-08-03 13:32:03 发布