AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

AcWing 48. 复杂链表的复刻--java+复制节点    原题链接    中等

作者: 作者的头像   vic0920 ,  2019-09-12 10:17:03 ,  所有人可见 ,  阅读 1220


2


题目描述

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

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

注意:

函数结束后原链表要与输入时保持一致。


复制节点 法

public ListNode copyRandomList(ListNode head) {
        if(head == null) return null;
        ListNode dummy = new ListNode(-1);
        dummy.next = head;

        while (head != null) {
            ListNode next = head.next;
            ListNode newHead = new ListNode(head.val);
            head.next = newHead;
            newHead.next = next;

            head = head.next.next;
        }

        head = dummy.next;
        while (head != null) {
            if(head.random == null) head.next.random = null;
            else{
                head.next.random = head.random.next;
            }
            head = head.next.next;
        }

        head = dummy.next;
        ListNode newHead = head.next;
        ListNode res = newHead;
        while(head != null) {
            ListNode next = head.next.next;
            head.next = next;
            head = head.next;
            if(head!=null){
                newHead.next = next.next;
                newHead = newHead.next;
            }
        }
        head = dummy.next;
        dummy.next = null;
        return res;
    }

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息