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

标签 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 中什么也没有,我想我需要一个循环,但我尝试过的每个人最终都是无限的。 有什么建议吗??

最佳答案

如果您想进一步阅读,您要求的算法类型是 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>

关于java - 如何根据键将无序列表拆分为2个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33747928/

相关文章:

java - Android Service-Activity 2种通信方式

java - 从文本文件中删除包含特定元素的行

java - JNI - System.LoadLibrary() 发现错误的依赖 dll

java - 顺序计数器设计问题

java - 如何正确重新排列 arraylist 以便能够从中提取

java - 需要一个简单的 CMS。我应该定制现有的 CMS 还是从头开始构建?

java - Java 基元数组是存储在堆栈还是堆中?

java - 将 SSL 证书导入 J9 keystore 时出现 Keytool 错误

java - 如何使用 Xstream 在现有 xml 文件中导入带有节点的字符串?

java - Android Studio - 任务 compileReleaseJavaWithJavac 执行失败