2016-03-25 2 views
0

Я пытаюсь объединить 2 связанных списка вместе, list1 и list2. В списке2 у вас есть элемент, который недоступен в списке1, который является клавиатурой, также было изменено количество мыши, новое количество мыши будет 3, потому что в списке1 было 1 количество мышей, а в списке2 - 3. Итак по сути, у вас будет новый связанный список, например, list3. list3 будет комбинировать содержимое list1 и list2 toghether, подобно клавиатуре элемента, которая была в списке2, но не в списке1, а также в новом количестве мыши.Слияние 2 связанных списков

import java.util.LinkedList; 
 
import java.util.ListIterator; 
 

 
public class TestLinkedList extends MyLinkedList { 
 
    
 
    public static void main(String[] args) { 
 

 
     LinkedList <String> list1 = new LinkedList < >(); 
 
     Demo demo = new Demo(); 
 

 
     String case1 = demo.setNameandQty(1, "Case"); 
 
     String monitor1 = demo.setNameandQty(3, "Monitor"); 
 
     String mouse1 = demo.setNameandQty(1, "Mouse"); 
 
     String ram1 = demo.setNameandQty(2, "RAM"); 
 
     String ssd1 = demo.setNameandQty(4, "SSD"); 
 

 
     int cm = 2; 
 

 
     list1.add(case1); 
 
     list1.add(monitor1); 
 
     list1.add(mouse1); 
 
     list1.add(ram1); 
 
     list1.add(ssd1); 
 

 
     System.out.println("Shopping List 1"); 
 
     ListIterator <String> it1 = list1.listIterator(); 
 

 
     while (it1.hasNext()) { 
 
      System.out.println(it1.next()); 
 
     } 
 

 
     list1.remove(3); 
 
     System.out.println("\nAfter deleting 4th item"); 
 
    
 
     for (String s: list1) { 
 
      System.out.println(s); 
 
     } 
 

 
     LinkedList <String> list2 = new LinkedList < >(); 
 
     String keyboard2 = demo.setNameandQty(1, "Keyboard"); 
 
     String mouse2 = demo.setNameandQty(2, "Mouse"); 
 

 
     list2.add(keyboard2); 
 
     list2.add(mouse2); 
 

 
     System.out.println("\nShopping list 2"); 
 
     for (String s: list2) { 
 
      System.out.println(s); 
 
     } 
 

 
     String holdMouse1q = ""; 
 
     String holdMouse2q = ""; 
 

 
     String getMouse1q = demo.getIntegers(mouse1, holdMouse1q); 
 
     int mouse1q = Integer.parseInt(getMouse1q); 
 

 
     String getMouse2q = demo.getIntegers(mouse2, holdMouse2q); 
 
     int mouse2q = Integer.parseInt(getMouse2q); 
 

 
     System.out.println("\nMouse 1 quantity: " + mouse1q); 
 
     System.out.println("Mouse 2 quantity: " + mouse2q); 
 

 
     int totalMouseQ = mouse1q + mouse2q; 
 

 
     // list1.addFirst("Flashdisks : 10"); 
 
     // System.out.println("\nAfter adding 10 flash disks"); 
 
     // for (String s : list1) { 
 
     //  System.out.println(s); 
 
     // } 
 
    } 
 
}

ответ

0

Я не уверен, что возвращаемое значение метода demo.setNameandQty() есть. Поэтому я просто предполагаю, что возвращаемое значение должно быть как <name>-<quality>, например. "Мышь-2".

Ниже мой метод слияния, решить, сортировать список элементов:

private static List<String> merge(List<String> list1, List<String> list2){ 
Collections.sort(list1); 
Collections.sort(list2); 
//ensure list always has 1 element 
list1.add(null); 
list2.add(null); 

List<String> list3 = new LinkedList<String>(); 

Iterator<String> l1 = list1.iterator(); 
Iterator<String> l2 = list2.iterator(); 

String item1 = l1.next(); 
String item2 = l2.next(); 
while(item1 != null && item2 != null){ 
    String name1 = getName(item1); 
    String name2 = getName(item2); 
    if(name1.compareTo(name2) < 0){ 
     list3.add(item1); 
     item1 = l1.next(); 
    } 
    else if(name1.compareTo(name2) > 0){ 
     list3.add(item2); 
     item2 = l2.next(); 
    } 
    else if(name1.compareTo(name2) == 0){ 
     //sum up the quality then add to the list 
     int totalQty = getQuality(item1) + getQuality(item2); 
     list3.add(name1 + "-" + totalQty); 
     item1 = l1.next(); 
     item2 = l2.next(); 
    } 
} 

//add the rest of the list, in case one of two lists still has items 
while(item1 != null){ 
    list3.add(item1); 
    item1 = l2.next(); 
} 
while(item2 != null){ 
    list3.add(item2); 
    item2 = l2.next(); 
} 

return list3; 
}  
private static String getName(String s){ 
    return s.substring(0, s.indexOf('-')); 
} 
private static int getQuality(String s){ 
    return Integer.valueOf(s.substring(s.indexOf('-')+1)); 
} 

Одно примечание здесь, что этот метод будет работать, если у вас есть дубликат элемента в одном списке, например. { "Мышь-1", "мышь-2"}. Чтобы исправить это, я думаю, что мы лучше гарантируем отсутствие дублирующего элемента вместо того, чтобы сделать наш метод слияния более сложным.

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