【剑指 offer】复杂链表的复刻

1、题目描述

请实现一个函数可以复制一个复杂链表。

在复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个额外的指针指向链表中的任意结点或者null。

2、问题描述:

3、问题关键:

  • 在每个结点后面插入一个和当前结点相同的结点,再,将插入的结点的random指针指向和原来对应的结点的下一个就可以了。

4、C++代码:

/**
 * Definition for singly-linked list with a random pointer.
 * struct ListNode {
 *     int val;
 *     ListNode *next, *random;
 *     ListNode(int x) : val(x), next(NULL), random(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *copyRandomList(ListNode *head) {
        if (!head) return head;
        auto p = head;
        while(p) {//在每个结点后面插入一个和当前结点相同的结点。
            auto tmp = new ListNode(p->val);
            auto t = p->next;
            p->next = tmp;
            tmp->next = t;
            p = t;
        }
        p = head;
        while(p) {//将新的结点的random指针指向原结点的random指针的下一个结点。
            if (p->random) 
                p->next->random = p->random->next;
            p = p->next->next;
        }
        p = head;
        ListNode *dummy = new ListNode(-1);
        auto cur = dummy;
        while(p) {//断开结点,提取出新建的结点。
            cur->next = p->next;
            cur = cur->next;
            p = cur->next;
        }
        return dummy->next;
    }
};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 1、属性 2、链表和数组的区别 2.1、数组概述 2.2、数组和链表优缺点 2.3、链表和数组的比较 3、单...
    我哈啊哈啊哈阅读 2,861评论 1 41
  • 转自:http://blog.csdn.net/oreo_go/article/details/52116214 ...
    YYT1992阅读 1,047评论 0 4
  • 转载请注明出处:http://www.jianshu.com/p/c65d9d753c31 在上一篇博客《数据结构...
    Alent阅读 3,541评论 4 74
  • 基本概念 链表的含义: 链表是一种用于存储数据集合的数据结构,具有以下属性 相邻元素之间通过指针相连 最后一个元素...
    古剑诛仙阅读 1,027评论 0 3
  • 大学的时候不好好学习,老师在讲台上讲课,自己在以为老师看不到的座位看小说,现在用到了老师讲的知识,只能自己看书查资...
    和珏猫阅读 1,486评论 1 3