复杂链表的复制

来源:互联网 发布:网络信息保密协议 编辑:程序博客网 时间:2024/06/07 05:49

问题描述:

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.

解题思路:

将1->2->3->4->NULL先复制为1->1->2->2->3->3->4->4->NULL,这样就会有如下关系式:

pCur->next->random = pCur->random->next;

/** * 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 == NULL)            return NULL;        RandomListNode *pCur = head, *tmp, *new_head;        while(pCur != NULL)/*复制结点*/        {            tmp =  new RandomListNode(pCur->label);            tmp->next = pCur->next;            pCur->next = tmp;            pCur = tmp->next;        }        pCur = head;        /* 注意调用空指针的next指针,会报错*/        while(pCur != NULL)/*复制任意指针*/        {            if (pCur->random != NULL)                pCur->next->random = pCur->random->next;            else                pCur->next->random = NULL;            pCur = pCur->next->next;        }        pCur = head;        tmp = new_head = head->next;        while(tmp != NULL)/* 将链表拆分为两个链表 */        {            pCur->next = tmp->next;            if(pCur->next == NULL)                break;            else                tmp->next = pCur->next->next;            pCur = pCur->next;            tmp = tmp->next;        }        return new_head;    }};


0 0
原创粉丝点击