Мне нужно создать функцию для суммирования 2 кусочно-линейных функций (как убывающих, так и возрастающих) и вставить их в третий список в порядке возрастания на основе координат оси x каждой точки. Итак, я создал несколько функций, все вроде проверяются, кроме этой, но я не знаю, в чем проблема. Он вообще ничего не вводит.
struct coords имеет двойные x, y;
dList has: coords pt;
node имеет: node * head, * tail ;
узел * предыдущий, * следующий;
dList insert(dList L, coords point) {
node *temp;
temp = new node;
if (temp == NULL) {
cout << "error";
exit(1);
}
temp->next = NULL;
temp->prev = NULL;
temp->pt = point;
if (L.head == NULL || L.tail == NULL) {
L.head = temp;
L.tail = temp;
return L;
}
if (L.head->pt.x > temp->pt.x) {
temp->next = L.head;
L.head->prev = temp;
L.head = temp;
return L;
}
if (L.tail->pt.x < temp->pt.x) {
temp->prev = L.tail;
L.tail->next = temp;
L.tail = temp;
return L;
}
node *cur;
cur = L.head->next;
while (cur->pt.x < temp->pt.x)
cur = cur->next;
temp->next = cur->next;
temp->prev = cur;
cur->next->prev = temp;
cur->next = temp;
return L;
}
node
иdList
? Это не складывается. Похоже, уnode
естьcoords pt
, а неdList
, как вы нам говорите. - person PajLe   schedule 31.12.2019std::list
и забудьте о взломе настраиваемых списков. - person Zan Lynx   schedule 31.12.2019coords
элемент в существующий список? - person PajLe   schedule 31.12.2019L.head=temp;
иL.tail=temp;
(что нормально, список в этой точке просто ссылается на себя или является круговым). Проблема возникает, когда вы вставляете второй узел. Вы не обрабатываете случай, когдаL.head == L.tail
знать, устанавливать лиL.head->next = L.tail = temp
. Вместо этого для второго узла вы просто сравниваетеpoint
дляhead
иtail
, которые в то время являются одним и тем же узлом. - person David C. Rankin   schedule 31.12.2019