-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathquestion35.cpp
More file actions
53 lines (50 loc) · 1.18 KB
/
Copy pathquestion35.cpp
File metadata and controls
53 lines (50 loc) · 1.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),
返回结果为复制后复杂链表的head。
注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空
Xiaobin Tian;
*/
struct RandomListNode {
int label;
struct RandomListNode *next, *random;
RandomListNode(int x) :
label(x), next(nullptr), random(nullptr) {
}
};
class Solution {
public:
RandomListNode* Clone(RandomListNode* pHead){
auto p = pHead;
while(p != nullptr){
RandomListNode* q = new RandomListNode(p->label);
q->next = nullptr;
q->next = p->next;
p->next = q;
p = q->next;
}
p = pHead;
RandomListNode* q;
while(p != nullptr){
q = p->next;
if(p->random)
q->random = p->random->next;
p = q->next;
}
p = pHead;
q = nullptr;
RandomListNode* dummyHead = nullptr;
if(p != nullptr){
dummyHead = q = p->next;
p->next = q->next;
p = q->next;
}
while(p != nullptr){
q->next = p->next;
q = q->next;
p->next = q->next;
p = q->next;
}
return dummyHead;
}
};