class Solution { private static ListNode copyAndMerge(ListNode head) { ListNode p = head; ListNode next; ListNode copy; while (p != null) { next = p.next; copy = new ListNode(p.val + 3); p.next = copy; copy.next = next; p = next; } p = head; while (p != null) { copy = p.next; next = copy.next; if (p.rand != null) { copy.rand = p.rand.next; } p = next; } return head; } private static ListNode splite(ListNode head) { if (head == null) { return null; } ListNode p1 = head; ListNode p2 = head.next, result = p2; ListNode next; while (p1 != null) { next = p1.next.next; p1.next = next; p2.next = next == null ? null : next.next; p1 = p1.next; p2 = p2.next; } return result; } private static ListNode function(ListNode head) { ListNode n = copyAndMerge(head); return splite(n); } private static void print(ListNode head) { while (head != null) { System.out.println(head.val); head = head.next; } } public static void main(String[] args) { ListNode n1 = new ListNode(1); ListNode n2 = new ListNode(2); ListNode n3 = new ListNode(3); // ListNode n4 = new ListNode(5); // ListNode n5 = new ListNode(1); n1.next = n2; n2.next = n3; n1.rand = n3; n3.rand = n1; // n3.next = n4; // n4.next = n5; ListNode head = function(n1); print(head); } } class ListNode { int val; ListNode next; ListNode rand; ListNode(int x) { val = x; } }
複製含有隨機指針節點的鏈表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.