复杂链表的复制

来源:互联网 发布:做数据库有前途吗 编辑:程序博客网 时间:2024/06/07 20:25

复制复杂链表,一个链表的每一个节点有一个指向nest指针指向

下一个节点,还有一个random指针指向这个链表

中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制##后的新链表

函数原型:pNode CapyComplexLink(pNode2 pHead)*

原链表如下:

//节点类型typedef struct Node2{    DateType date;    struct  Node2 *nest1;    struct Node2 *random;}Node2,*pNode2;

这里写图片描述

函数的实现

pNode2 CapyComplexLink(pNode2 pHead){    pNode2 pHead2;//新链表的头    assert(pHead);    if (pHead)        return NULL;    pNode2 ptail = NULL, pnewNode = NULL;    ptail = pHead;    pHead2 = ptail;    //构建一个新的链表,奇数节点为原节点,偶节点为新节点。    //原链表1->2->3->4->5->NULL;    //构建后1->1->2->3->3->4->4->5->5->NULL;(只考虑nest指针作用)    while (ptail)    {        pnewNode = (pNode2)malloc(sizeof(Node2));        if (pnewNode == NULL)            return NULL;        pnewNode->nest1 = ptail->nest1;        pnewNode->random=NULL;        pnewNode->date = ptail->date;        ptail->nest1 = pnewNode;        ptail = pnewNode->nest1;    }    ptail = pHead;    //pnewNode = ptail->nest1;    while (ptail)//复制random指针域    {        pnewNode = ptail->nest1;        pnewNode->random = ptail->random->nest1;        ptail = pnewNode->nest1;    }    ptail = pHead;    pHead2=pnewNode = ptail->nest1;    while (ptail->nest1)//还原原链表,剥离复制后的所求链表    {        ptail->nest1 =pnewNode->nest1;        pnewNode->nest1 = ptail->nest1;    }    return pHead2;}
原创粉丝点击