创意手机网站,ps做 网站标准尺寸是多少合适,网站开发与桌面应用开发,网络公司开发软件题目比较简单#xff0c;重点是理解思想#xff0c;random不管#xff0c;copy一定要放在next
而且里面的遍历过程不能省略
解法都在代码里#xff0c;不懂就留言或者私信
/*
// Definition for a Node.
class Node {int val;Node next;Node random;public Node(int val…题目比较简单重点是理解思想random不管copy一定要放在next
而且里面的遍历过程不能省略
解法都在代码里不懂就留言或者私信
/*
// 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 {/**基本思路1.遍历链表每个节点拷贝一个节点放到它的next位置然后它的copy的下一个放它原来的next2.把copy的random指针指向原始节点random指针的下一个因为下一个是random的copy3.拆分链表把新的链表拷贝出来*/public Node copyRandomList(Node head) {if(head null) {return null;}/**遍历链表复制节点并连接 */Node cur head;while(cur ! null) {Node next cur.next;Node curCopy new Node(cur.val);cur.next curCopy;curCopy.next next;cur next;}/**设置新节点的random指针*/cur head;while(cur ! null) {/**这里因为存在复制节点并且复制节点肯定放在原始节点的下一个所以cur.next肯定不为空所以这里不会有空指针的问题*/Node next cur.next.next;cur.next.random cur.random null? null : cur.random.next;cur next;}/**断开链接分离出拷贝链表,这里先把拷贝链表头节点拿出来*/Node newHead head.next;/**还是通过从原来的头开始遍历因为原链表要改next指针 */cur head;while(cur ! null) {/**拿到原来链表中的next这个next可能为空 */Node next cur.next.next;/**这里有可能next是null要判断不然会有空指针 */cur.next.next next null? null : next.next;/**指向原来的next */cur.next next;/**指针挪到下个节点继续 */cur next;}return newHead;}
}