我目前正在尝试使用一个函数创建一个链接列表,该函数可以使用我制作的一些函数添加排序到列表中的整数,但我遇到了代码问题:
void list::add_sorted(int el)
{
if (empty()) add_first(el);
else if (el<=head->data) add_first(el);
else if (el >= tail->data) add_last(el);
}
我想知道为什么我的代码中的输出: 3
在我写的主要功能中:
list t1;
t1.add_sorted(5);
t1.add_sorted(3);
t1.add_sorted(9);
t1.print();
以下是add_first(int el),add_last(int el)和empty()的实现:
list::list()
{
head = tail = 0;
}
bool list::empty()
{
return (head == 0);
}
void list::add_first(int el)
{
if (empty()) head = tail = new node(el);
else
head = new node(el);
}
void list::add_last(int el)
{
if (empty()) head = tail = new node(el);
else
tail=tail->next = new node(el);
}
提前致谢。
答案 0 :(得分:0)
我对插入已排序链表的理解是保持列表排序。
这意味着您需要搜索列表以找到添加新元素的适当位置:
void addSorted(int value)
{
node * new_element = new node(el);
new_element->next = nullptr;
if (head == nullptr)
{
head = new_element;
tail = head;
}
else
{
node * p = head;
node * previous = head;
while (p != nullptr)
{
if (el > p.value)
{
new_element->next = p;
previous->next = new_element;
break;
}
}
if (p == nullptr)
{
previous.next = new_element;
}
}
}
这里的想法是你需要在列表中搜索插入点,然后添加你的新元素。有一些极端情况,例如head
为空时。
答案 1 :(得分:0)
您在public static void main(String[] args) {
String a = "";
String b = "";
Random random = new Random();
StringBuilder builder = new StringBuilder(119999999);
for(long i = 0; i < 119999999; i++)
builder.append((char) random.nextInt());
a = builder.toString() + "zzzzzzzzz";
b = a.substring(0, a.length() - 9) + "dsadsasda";
Instant start = Instant.now();
boolean test = a.length() > b.length() ? a.contains(b) : b.contains(a);
//boolean test = a.contains(b) || b.contains(a);
if(test)
System.out.println("OK");
System.out.println(Duration.between(start, Instant.now()).toMillis());
}
方法中犯了一个小错误。由于您没有添加所有代码,我已经修改了您的代码,下面提供了这些代码。请比较以下代码以了解您的错误,尤其是比较方法void list::add_first(int el)
。希望这会有所帮助。
struct node { 上市: int数据; 节点*下一个; node(int val):data(val),next(NULL){} };
void list::add_first(int el)