首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并2个链表

合并2个链表
EN

Stack Overflow用户
提问于 2016-03-25 21:55:27
回答 1查看 69关注 0票数 0

我尝试将两个链表合并在一起,list1和list2。在list2中,有一项在list1中是不可用的,那就是键盘,而且鼠标的数量也发生了变化,新的鼠标数量将是3,因为在list1中有1个鼠标数量,而在list2中有3个鼠标数量。所以基本上你会有一个新的链表,称为list3。list3将把list1和list2的内容结合在一起,就像list2中的项目键盘,而不是list1中的项目键盘,以及新数量的鼠标。

代码语言:javascript
复制
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);
        // }
    }
}

EN

回答 1

Stack Overflow用户

发布于 2016-03-26 02:23:48

我不确定demo.setNameandQty()方法的返回值是什么。所以我假设返回值应该类似于<name>-<quality>,例如。“鼠标-2”。

下面是我的merge方法,通过对项目列表进行排序来求解:

代码语言:javascript
复制
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”}。为了解决这个问题,我认为我们最好确保没有重复的项目,而不是使我们的merge方法变得更加复杂。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36221327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档