码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 之Copy List with Random Pointer(23)

时间:2016-05-21 15:50:08      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

深拷贝一个链表,不同的是这个链表有个额外的随机指针。参考:http://blog.csdn.net/ljiabin/article/details/39054999

做法非常的巧妙,分成三步,一是新建结点,并放在旧结点之后;二是修改新结点的random指针;三是将新旧链表断开。

技术分享
RandomListNode *randomList(RandomListNode *head)
      {
          //复制每个结点,并将新结点放在旧结点之后
          for (RandomListNode *cur = head; cur != nullptr;)
          {
              RandomListNode *node = new RandomListNode(cur->label);
              node->next = cur->next;
              cur->next = node;
              cur = node->next;
          }

          //修改新结点的Random指针
          for (RandomListNode *cur = head; cur != nullptr;)
          {
              if (cur->random != nullptr)cur->next->random = cur->random->next;

              cur = cur->next->next;
          }

          //将新旧链表断开
          RandomListNode dummy(-1);
          for (RandomListNode *cur = head,*new_cur=&dummy; cur != nullptr;)
          {
              new_cur->next = cur->next;
              new_cur = new_cur->next;

              cur->next = cur->next->next;
              cur = cur->next;

          }

          return dummy.next;
      }
View Code

 

leetcode 之Copy List with Random Pointer(23)

标签:

原文地址:http://www.cnblogs.com/573177885qq/p/5514839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!