简单和忙碌的一天

文章展示了两个C++实现,一个是使用头插法反转链表,另一个是复制带有随机指针的链表。在反转链表的过程中,通过中间变量辅助实现了链表的反转。而在复制链表时,利用哈希映射保持原节点与新节点的对应关系,确保了随机指针的正确复制。
摘要由CSDN通过智能技术生成

很细致的过完了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];


        
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值