【问题标题】:How to split an unordered linked list into 2 lists according to a key如何根据键将无序列表拆分为2个列表
【发布时间】:2015-11-17 02:01:45
【问题描述】:

我必须根据一个键并使用这个签名来拆分一个链表,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 中没有任何内容,我想我需要一个循环,但我尝试过的每个人最终都是无限的。 有什么建议吗??

【问题讨论】:

    标签: java


    【解决方案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;
      }
    
    }
    

    性能说明:如果您使用的是单向链表,则插入到列表的前面总是更快,因为在其他任何地方插入都需要重新遍历列表。 p>

    【讨论】:

      猜你喜欢
      • 2022-12-22
      • 2020-10-07
      • 1970-01-01
      • 2011-01-05
      • 2019-10-12
      • 2015-12-13
      • 2018-10-24
      • 2018-09-01
      • 1970-01-01
      相关资源
      最近更新 更多