• 链表复制


    48. 复杂链表的复刻

    请实现一个函数可以复制一个复杂链表。

    在复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个额外的指针指向链表中的任意结点或者null。

    注意:

    • 函数结束后原链表要与输入时保持一致。
    /**
     * Definition for singly-linked list with a random pointer.
     * struct ListNode {
     *     int val;
     *     ListNode *next, *random;
     *     ListNode(int x) : val(x), next(NULL), random(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode *copyRandomList(ListNode *head) {
            auto p = head;
            //第一次遍历,每个节点后面复制一个节点
            while(p){
                auto t = new ListNode(p->val);
                t->next = p->next;
                p->next = t;
                p = t->next;
            }
            p = head;
            //第二次遍历,为复制的节点接上random指针
            while(p){
                if(p->random){
                    //下面这句要理解
                    p->next->random = p->random->next;
                }
                p = p->next->next;
            }
            auto newh = new ListNode(-1);
            auto cur = newh;
            p = head;
            //第三次遍历,将复制的节点与原节点分离;
            while(p){
                cur->next = p->next;
                cur = cur->next;
                p->next = p->next->next;
                p = p->next;
            }
            return newh->next;
        }
    };
  • 相关阅读:
    springmvc实现文件上传
    springmvc乱码及restful
    springmvc数据的处理
    springmvc跳转方式
    controller配置
    SpringMVC Annotation
    SpringMVC基本包
    第一章 面向对象软件工程与UML
    Oracle数据库之PL/SQL程序基础设计
    thinkphp5 给CSS JS 添加版本号
  • 原文地址:https://www.cnblogs.com/Aliencxl/p/12341446.html
Copyright © 2020-2023  润新知