如何在java中加倍链表的大小?

时间:2016-11-30 06:42:55

标签: java linked-list

例如,给出诸如[1,2,3,4,5]的列表。 在我调用doublelist()之后,原始列表应为[1,1,2,2,3,3,4,4,5,5]

这是我的代码:

public void stutter(){
    ListNode curr = front;
        while(curr!=null){
        ListNode tempNode = new ListNode();
        tempNode.data=curr.data;
        tempNode.next=curr.next;
        curr.next=tempNode;
        curr=tempNode.next;
    }  
}

我的问题是如何在不使用tempNode.data = curr.data?

的情况下编写此方法

ListNode.java

public class ListNode {
    public int data;       // data stored in this node
    public ListNode next;  // a link to the next node in the list

}

2 个答案:

答案 0 :(得分:0)

您可以在Cloneable

中实施ListNode界面
public class ListNode implements Cloneable{
    public int data;       // data stored in this node
    public ListNode next;  // a link to the next node in the list

    @Override
    public ListNode clone()  {
      ListNode cloned = null;
      try {
          cloned = (ListNode) super.clone();
      }finally {
          return cloned;
      }
    }
}

您可以致电ListNode temp = curr.clone();来创建新节点。

答案 1 :(得分:0)

您的计划的实际意图是什么?

您可以为ListNode创建一个副本构造函数,可以为您完成一半的工作。

class ListNode {
    public int data; // data stored in this node
    public ListNode next; // a link to the next node in the list

    public ListNode() { } //Default constructor. You will need this

    // Create this constructor for ListNode
    public ListNode(ListNode other){
        this.data = other.data;
        this.next = other.next;
    }
}

然后,在stutter方法中,

public void stutter() {
    ListNode curr = front;
    while (curr != null) {
        ListNode tempNode = new ListNode(curr);// Using the copy constructor
        curr.next = tempNode;
        curr = tempNode.next;
    }
}

这有帮助吗?