如何根据键将无序链表拆分为2个列表

时间:2015-11-17 02:01:45

标签: java

我必须根据密钥拆分链表并使用此签名,public void split(UnorderedLinkedListInt list1,UnorderedLinkedListInt list2,int key)

这是我到目前为止的代码:

public void split(UnorderedLinkedListInt list1, UnorderedLinkedListInt list2,     int key){
    UnorderedLinkedListInt list3 = this;
    UnorderedLinkedListInt list4 = list3;


    if(key > list3.first.info){
        list1.insertLast(list3.first.info);
        list3.first=list3.first.link;


    }

    if(key <= list4.first.info){
       list2.insertFirst(list4.first.info);
       list4.first=list4.first.link;
      }


  }

当我用1 2 3 4 5 6调用方法时,它在list1中打印2 3 4 5 6 1并且list2中没有任何内容,我想我需要一个循环,但我尝试过的每个人最终都是无限的。 有什么建议??

1 个答案:

答案 0 :(得分:1)

如果您想进一步阅读,您要求的算法类型为partition,您可能希望将其作为this变量的循环实现。

public void split(UnorderedLinkedListInt list1, UnorderedLinkedListInt list2, int key) {

  //Replace this by what ever type is making up your lists nodes
  UnorderedLinkedListInt.Node node = this.first;

  //Check at each step if you have reached the end of the list
  while (node != null) {
    //Partition logic
    if (node.info > key)
      list1.insertFirst(node.info);
    else
      list2.insertFirst(node.info);

    //Update to the next node
    node = node.link;
  }

}

性能注意:如果您使用的是单链表,那么总是更快地插入到列表的前面,因为在其他地方插入需要重新遍历列表。