2016-11-30 3 views
-1

Например, для списка, такого как [1, 2, 3, 4, 5]. После того как я называю doublelist(), то Origianl список должен быть [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]Как удвоить размер связанного списка в java?

Вот мой код:

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 

} 
+1

Почему? Сама природа этой проблемы связана с созданием копий узлов, поэтому, конечно, вы будете копировать '.data' с одного узла на другой. Что вы пытаетесь выполнить и почему? И что вы ожидали от получившегося списка (например, какие узлы и ссылки будут выглядеть)? – ajb

+0

Как бы вы назначили узел текущему узлу без создания? .. вам нужно создать узел, и это то, что вы делаете, создавая временный узел –

+0

Как скопировать узел? Я новичок в java. – awd

ответ

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; 
    } 
} 

ли эта помощь?

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(); создать новый узел.

Смежные вопросы