如何进行浅表复制LinkedList

问题描述 投票:0回答:1

我正在尝试以递归方式为我的链表做一个克隆方法:

public ListNode<E> deep_clone() {
    first = deep_clone(first);
    ListNode<E> copy = new ListNode<>(first);
    return copy;
}

private static Node deep_clone(Node head) {
    if (head == null) {
        return null;
    }

    Node temp = new Node(head.getData());
    temp.setNext(deep_clone(head.getNext()));

    return temp;
}

但是我不知道该如何执行此浅表副本的递归方法?这是一项家庭作业!!!所以我不需要解决方案,我需要技巧...

编辑

非常感谢AndyMan的建议:

private static Node shallow_clone(Node head) {
   if (head == null)
      return null;

   Node temp = new Node(head.getData());
   temp.setNext(head.getNext());  // Just copy the reference

return temp;
}

但是有一个问题,如何同时Junit深层复制和浅层复制方法?

我做了以下操作,但Junit测试失败:

@Test
public void test_shallow_clone(){
    ListNode<Integer> list =new ListNode<>();
    for (int i = 0; i < 10; i++)
        list.insert(i);

    ListNode<Integer>cloned =list.shallow_clone();
    //assertSame(cloned,list); //failed i dont know why
    //assertEquals(cloned, list);//Even though its shallow copy i get that they are  not equal!
    assertSame(list.getFirst(), cloned.getFirst());
    assertTrue(cloned.equals(list));
}

以及深层副本的测试:

@Test
public void test_depp_clone(){
    ListNode<Integer> list =new ListNode<>();
    for (int i = 0; i < 10; i++)
        list.insert(i);

    ListNode<Integer>cloned =list.depp_clone();

    assertSame(cloned.getFirst(),list.getFirst());//check for same val..
    //assertEquals(cloned, list);//this make the test fail..
    assertFalse(cloned.equals(list));//okay the are not equal lists this means its deep copy...no implemented equal method :)
}
java recursion linked-list implementation
1个回答
0
投票

说头指向node0,后者指向node1:头=节点0 =>节点1

© www.soinside.com 2019 - 2024. All rights reserved.