code:
/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node() {}
Node(int _val, Node* _next, Node* _random) {
val = _val;
next = _next;
random = _random;
}
};
*/
class Solution {
public:
Node* copyRandomList(Node* head) {
if (nullptr == head) {
return nullptr;
} else {
Node* tempNode = head->next;
Node* tempTail = nullptr;
Node* nodeRet = new Node(head->val, head->next, nullptr);
head->next = nodeRet;
while (tempNode) {
tempTail = new Node(tempNode->val, tempNode->next, nullptr);
tempNode->next = tempTail;
tempNode = tempTail->next;
}//while (tempNode)
tempNode = head;
while (tempNode) {
tempNode->next->random = nullptr == tempNode->random ? nullptr : tempNode->random->next;
tempNode = tempNode->next->next;
}//while (tempNode)
head->next = nodeRet->next;
tempNode = head->next;
tempTail = nodeRet;
while (tempNode) {
tempTail->next = tempNode->next;
tempTail = tempNode->next;
tempNode->next = tempTail->next;
tempNode = tempNode->next;
}//while (tempNode)
return nodeRet;
}//if (nullptr == head) else
}//Node* copyRandomList(Node* head)
};//class Solution
result:
personal opinion:
Up to 2019.11.29 13:30(UTC+8), it is regretful that could not slove this problem by golang in leetcode.