0

leetcode でのサーフィン 私はこの質問を試してみたかった: リンクされたリストは、各ノードがリスト内の任意のノードまたは null を指す可能性のある追加のランダム ポインターを含むように与えられます。リストのディープ コピーを返します。ただし、採点者を通過しておらず、その理由がわからないため、コードにエラーがあるようです。

私のコードには 3 つのフェーズがあります。

  1. 1 番目と 2 番目のノードの間に新しいノードを挿入します。
  2. オリジナルのランダム ポインタをコピー ノードのランダム ポインタにコピーします。
  3. 2 つのリストを分けます。

助けていただけますか?ありがとうございました。


/**
 * Definition for singly-linked list with a random pointer.
 * class RandomListNode {
 *     int label;
 *     RandomListNode next, random;
 *     RandomListNode(int x) { this.label = x; }
 * };
 */
public class Solution {
    public RandomListNode copyRandomList(RandomListNode head) {
        // Note: The Solution object is instantiated only once and is reused by each test case.

        if(head == null) return head;

        RandomListNode current = head;
        RandomListNode temp = null;
        RandomListNode solution = null;
        //insertion
        while(current != null){
            RandomListNode clone = new RandomListNode(current.label);
            temp = current.next;
            current.next = clone;
            clone.next = temp;
            current = current.next.next;
        }

        //copy random
        current = head;
        while(current != null){
            if(current.random!=null){
            current.next.random = current.random.next;
            }
            current = current.next.next;
        }

        //separation
        current = head;
        solution  = current.next;
        while(current != null){
            temp = current.next;
            current.next = current.next.next;
            temp.next = temp.next.next;
            current = current.next.next;
        }

        return solution;
    }
}
4

1 に答える 1

0

最後にジャンプしすぎていませんか? (次の元のノードである) にcurrent = current.next.next既に割り当てられcurrent.nextcurrent.next.nextいるので、最後のループの最後の行は.current = current.next

于 2013-11-11T00:09:13.907 に答える