例如,给出诸如[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
}
答案 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;
}
}
这有帮助吗?