简单和忙碌的一天

很细致的过完了C++的所有语法,重新的感觉就是总是能发现遗忘的细节。另外是今天的热身。

简单和忙碌的一天_第1张图片

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;
    }
};
简单和忙碌的一天_第2张图片

class Solution {
public:
    Node* copyRandomList(Node* head) {
        Node* h=head;
        unordered_map 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];


        
    }
};

你可能感兴趣的:(链表,leetcode,c++)