• 复制链表


     

     方法1 :先拼接 再拆分

    /*
    // Definition for a Node.
    class Node {
        int val;
        Node next;
        Node random;
    
        public Node(int val) {
            this.val = val;
            this.next = null;
            this.random = null;
        }
    }
    */
    class Solution {
         //避免null.next
        public Node copyRandomList(Node head) {
            if(head == null) return null;
            Node cur  =head;
            //7  7 13 13 11 11 10 10 1 1 null
            while(cur!=null){
                Node tmp  = new Node(cur.val);
                tmp.next  =cur.next;
                cur.next   =tmp;
                cur = cur.next.next;
            }
            cur=  head;
            //修改新的链表random
            while(cur!=null){
                if(cur.random!=null){//如果cur.random==null,cur.random.next:NullPointerException
                       cur.next.random =cur.random.next;
                }
                cur =cur.next.next;
            }
            cur =head;
            Node last =head.next,so=head.next;
            //         while(xx!=null){
            //     x.next  =x.next.next;
              
            //     xx.next = xx.next.next;//xx.next已经是null,NullPointerException
                
            //     x =x.next;
            //     xx = xx.next;
            // }
              while(last.next!=null){
                cur.next  =cur.next.next; 
                last.next = last.next.next;
                cur =cur.next;
                last = last.next;
            }
                cur.next = null;//xx.next已经是null,两条链表最后都是null
                return so;//last已经是新链表的最后面,所以要返回so
        }
    }

    方法2 Map 先存下来,再遍历修改next 和random

    让每个单独的节点形成链表

    /*
    // Definition for a Node.
    class Node {
        int val;
        Node next;
        Node random;
    
        public Node(int val) {
            this.val = val;
            this.next = null;
            this.random = null;
        }
    }
    */
    class Solution {
        HashMap<Node,Node> map  = new HashMap();
        public Node copyRandomList(Node head) {
            if(head == null) return null;
           Node cur = head;
           while(cur!=null){
               Node tmp = new Node(cur.val);
               map.put(cur,tmp);
               cur = cur.next;
           }
           cur = head;
             while(cur!=null){
               map.get(cur).next = map.get(cur.next);
                map.get(cur).random = map.get(cur.random);
               cur = cur.next;
           }
           return map.get(head);
    }
    }
  • 相关阅读:
    苏州大学2017年复试试题
    四川大学2019年复试试题
    四川大学2009年复试试题
    华东师范大学2019年复试试题
    华东师范大学2018年复试试题
    华东师范大学2017年复试试题
    华东师范大学2016年复试试题
    中国科学院大学2020年高等代数考研试题
    中国科学院大学2020年数学分析考研试题
    中国科学技术大学2020年高等代数考研试题
  • 原文地址:https://www.cnblogs.com/tingtin/p/15740852.html
Copyright © 2020-2023  润新知