我必须根据密钥拆分链表并使用此签名,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中没有任何内容,我想我需要一个循环,但我尝试过的每个人最终都是无限的。 有什么建议??
答案 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;
}
}
性能注意:如果您使用的是单链表,那么总是更快地插入到列表的前面,因为在其他地方插入需要重新遍历列表。