我必须根据键拆分链表并使用此签名,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/