A linked list is given such that each node contains an additional random pointer which could point t

Posted Adding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A linked list is given such that each node contains an additional random pointer which could point t相关的知识,希望对你有一定的参考价值。

图解:

此题过程分为三个阶段,分别是 1、负责后面一个节点,并且将这个节点插入到原来链表中  2、复制后面一个节点的random指针。 3 拆分组合链表为两部分。

第一部分代码:

  while(currentnode!=null){//复制节点,并且将节点插入到该节点的后面
              RandomListNode clonenode=new RandomListNode(currentnode.label);
              clonenode.next=currentnode.next;
              currentnode.next=clonenode;
              currentnode=clonenode.next;
          }

第二部分 代码:

  currentnode=head;
          while(currentnode!=null){//复制随机指针。
              RandomListNode  clonenode=currentnode.next;
              if(currentnode.random!=null){
                  clonenode.random=currentnode.random.next;//这里要指向随机指针的后一个,因为是复制滴啊,千万不要忘记了。
              }
              currentnode=clonenode.next;
          }

第三部分代码:

  RandomListNode cloneHead=head.next;
          currentnode=head;
          while(currentnode.next!=null){
              RandomListNode temp=currentnode.next;
              currentnode.next=temp.next;
              currentnode=temp;
          }

总的代码:

class RandomListNode {
     int label;
     RandomListNode next, random;
     RandomListNode(int x) { this.label = x; }
 };
public class Solution {
      public RandomListNode copyRandomList(RandomListNode head) {
          if(head==null)return null;
          RandomListNode currentnode=head;
          while(currentnode!=null){//复制节点,并且将节点插入到该节点的后面
              RandomListNode clonenode=new RandomListNode(currentnode.label);
              clonenode.next=currentnode.next;
              currentnode.next=clonenode;
              currentnode=clonenode.next;
          }
          currentnode=head;
          while(currentnode!=null){//复制随机指针。
              RandomListNode  clonenode=currentnode.next;
              if(currentnode.random!=null){
                  clonenode.random=currentnode.random.next;//这里要指向随机指针的后一个,因为是复制滴啊,千万不要忘记了。
              }
              currentnode=clonenode.next;
          }
          
          RandomListNode cloneHead=head.next;
          currentnode=head;
          while(currentnode.next!=null){
              RandomListNode temp=currentnode.next;
              currentnode.next=temp.next;
              currentnode=temp;
          }
          return cloneHead;
            
      }
}

 

以上是关于A linked list is given such that each node contains an additional random pointer which could point t的主要内容,如果未能解决你的问题,请参考以下文章

Convert a given Binary Tree to Doubly Linked List

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k

Convert a given binary tree to double linked list

Leetcode 142. Linked List Cycle IIJAVA语言

problem report: middle of linked list

Reverse Linked List II