zoukankan      html  css  js  c++  java
  • LeetCode138 复制带随机指针的链表

    给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。

    要求返回这个链表的深度拷贝。 

     


     

     

    //章节 - 链表    
    //四、小结
    //4.复制带随机指针的链表
    /*
    算法思想:
        emmm..这道题不会0.0
        参考步骤:
        1. 在原链表的每个节点后面拷贝出一个新的节点
        2. 依次给新的节点的随机指针赋值,而且这个赋值非常容易 cur->next->random = cur->random->next
        3. 断开链表可得到深度拷贝后的新链表
    */
    //算法实现:
    /**
     * Definition for singly-linked list with a random pointer.
     * struct RandomListNode {
     *     int label;
     *     RandomListNode *next, *random;
     *     RandomListNode(int x) : label(x), next(NULL), random(NULL) {}
     * };
     */
    class Solution {
    public:
        RandomListNode *copyRandomList(RandomListNode *head) {
            if (!head) 
                return NULL;
            RandomListNode *cur = head;
            while (cur) {
                RandomListNode *node = new RandomListNode(cur->label);
                node->next = cur->next;
                cur->next = node;
                cur = node->next;
            }
            cur = head;
            while (cur) {
                if (cur->random) {
                    cur->next->random = cur->random->next;
                }
                cur = cur->next->next;
            }
            cur = head;
            RandomListNode *res = head->next;
            while (cur) {
                RandomListNode *tmp = cur->next;
                cur->next = tmp->next;
                if(tmp->next) tmp->next = tmp->next->next;
                cur = cur->next;
            }
            return res;
        }
    };
  • 相关阅读:
    EasyUI Datagrid换页不清出勾选方法
    【HDOJ】4902 Nice boat
    【HDOJ】1688 Sightseeing
    【HDOJ】3584 Cube
    【POJ】2155 Matrix
    【HDOJ】4109 Instrction Arrangement
    【HDOJ】3592 World Exhibition
    【POJ】2117 Electricity
    【HDOJ】4612 Warm up
    【HDOJ】2888 Check Corners
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10061535.html
Copyright © 2011-2022 走看看