我正在尝试找出如何复制下面给出的此列表,任何寻求帮助的建议都会很可爱(下面是我的输出)
public class k {
private ListNode front;
public k() {
front = null;
}
public k(ListNode sentIn) {
front = sentIn;
}
public void duplicate() {
// ListNode head = front;
ListNode temp = front;
while (temp != null && temp.getNext() != null) {
temp = temp.getNext();
}
ListNode head = front;
while (head != null) {
temp.setNext(new ListNode(head.getValue(), temp.getNext()));
head = head.getNext();
}
}
public class ListNode implements Linkable
{
private Comparable listNodeValue;
private ListNode nextListNode;
public ListNode()
{
listNodeValue = null;
nextListNode = null;
}
public ListNode(Comparable value, ListNode next)
{
listNodeValue=value;
nextListNode=next;
}
public Comparable getValue()
{
return listNodeValue;
}
public ListNode getNext()
{
return nextListNode;
}
public void setValue(Comparable value)
{
listNodeValue = value;
}
public void setNext(Linkable next)
{
nextListNode = (ListNode)next;
}
}
我的输出 原稿:1、5、3、4、7 调用重复项后:
预期输出: 1,5,3,4,7,1,5,3,4,7
答案 0 :(得分:0)
复制节点后,在循环中执行temp = temp.next
。
(创建每个新节点时无需使用temp.getNext()
;其上方的循环可确保其为null
。)
答案 1 :(得分:0)
在导航列表时,您正在修改列表。因此,您的循环将继续超出您的预期。也就是说,在循环开始时,您将头设为列表中的第一个,而将temp作为最后一个。然后在temp旁边添加一个next,这样当head变为temp(在列表的末尾)时,它将有一个next。
另外,在新的ListNode中添加temp.getNext()作为下一个顺序时,顺序也会相反。
如果您拍摄列表大小的快照,然后循环播放多次,则可能会起作用。
public void duplicate(ListNode front) {
//ListNode head = front;
ListNode temp = front;
int size = 0;
while (temp != null && temp.getNext() != null) {
temp = temp.getNext();
size++;
}
ListNode head = front;
while (head != null && size-- >= 0) {
temp.setNext(new ListNode(head.getValue(), null));
temp = temp.getNext();
head = head.getNext();
}
}