加入两个升序链接列表

时间:2014-11-30 15:58:04

标签: java linked-list

我正在尝试将已经按升序排列的两个链接列表连接到一个链接列表中,这是我到目前为止所拥有的, 虽然我的问题是,如果我说两个列表:[1,2,3,4,5,6]和[4,5,6,7,8]列表2的[6,7,8]部分将不添加到连接列表,因为第一个for循环(; list1!= null || list2!= null)继续执行,直到list2 = null,但我使用了||尝试阻止这个操作数,但它继续这样做?

private static <T extends Comparable<? super T>> Cell<T> JoinLists(Cell<T> list1, Cell<T> list2)
{
    Cell<T> temp = null;
    for(;list1!=null||list2!=null; list2=list2.next){
        System.out.println("for 1: "+linkedListToString(list2));
        for(;list1!=null; list1=list1.next){
            System.out.println("for 2: "+linkedListToString(list2));
            if(list1.first.compareTo(list2.first)>0){
                temp = new Cell<T>(list2.first,temp);
                break;
            } else {
                temp = new Cell<T>(list1.first,temp);
            }
        }
    }
 for(;list1!=null;list1=list1.next){
    temp = new Cell<T>(list1.first,temp);
  } 
 for(;list2!=null;list2=list2.next){
    temp = new Cell<T>(list2.first,temp);
  } 
for(;temp!=null;temp=temp.next){
    list1 = new Cell<T>(temp.first,list1);
}
return list1;
}

1 个答案:

答案 0 :(得分:0)

您正在获得此行为,因为在内部for循环的第一次迭代完成后,list1会耗尽,即变为null。因此,从外部for循环的第二次迭代开始,由于list2not null,因此它会一直递增,直到变为null

使用现有逻辑,当list1耗尽(处理重叠值)时,您需要从外循环中突破。