题目
设链表的结构为
struct RandomListNode {
int label;
struct RandomListNode *next, *random;
RandomListNode(int x) :
label(x), next(NULL), random(NULL) {
}
};
其中random 指针可指向链表中任意值,也可为NULL。
如:
思路
(1)复制原链表的每个节点,使每个节点的复制节点都在该节点的后边。如下图
注意到,此时复制后的结点的random指针均为NULL.
(2)设置复制节点的random指针,如果原链表节点的random指针为NULL,该节点复制节点的random指针为NULL。
如果原链表节点的random指针不为NULL,且指向p,该节点复制节点的random指针指向p->next。