很细致的过完了C++的所有语法,重新的感觉就是总是能发现遗忘的细节。另外是今天的热身。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
// 头插法 中间变量保存下一个结点坐标
ListNode* r = head;
ListNode* newn = new ListNode(-1);
newn->next = NULL;
ListNode* ret = newn;
ListNode* q;
while (r!=NULL)
{
q = r->next;
r->next = newn->next;
newn->next = r;
r = q;
}
return ret->next;
}
};
class Solution {
public:
Node* copyRandomList(Node* head) {
Node* h=head;
unordered_map<Node*,Node*> map;
while(h!=NULL){
map[h]=new Node(h->val);//先复制节点值,原节点-》新的节点,且新节点值为原节点值
h=h->next;
}
h=head; //h再次指向原链表头节点
while(h!=NULL){
map[h]->next=map[h->next]; //连接新链表仅针对map中产生的新节点,不能把map中的节点指向原来的链表中的节点
map[h]->random=map[h->random];
h=h->next;
}
return map[head];
}
};