Предположим, что ваш список A
Затем вы можете запрограммировать следующее объявление, которое вы получите в виде файла csv (только для столбцов!)
R="\n".join(A)
f = open('Columns.csv','w')
f.write(R)
f.close()
В вашей программе есть 3 основные ошибки.
int *val = NULL;
Здесь это должно быть int val
не int *val
. remove_left()
. Здесь вы должны отредактировать (*head)
не (*tail)
. Также указатель (следующий, perv) управляется неправильно. remove_right()
. Ошибки в управляющих указателях. Модифицированные функции: -
void remove_right(Node **head, Node **tail, int *val) // modified This function.
{
Node *temp = (*tail);
if (temp == NULL)
{
printf("Cannot be removed doesn't point to anything\n");
return;
}
else
{
*val = temp->data;
temp->prev->next = NULL;
(*tail) = temp->prev;
}
free(temp);
}
void remove_left(Node **head, Node **tail, int *val) // modified This function.
{
Node *temp = (*head);
if (temp == NULL)
{
printf("Cannot be removed doesn't point to anything\n");
return;
}
else
{
*val = temp->data;
temp->next->prev = NULL;
(*head) = temp->next;
}
free(temp);
}
Измененный main (): -
int main(int argc, char const *argv[])
{
int val = -1; // Modified here
Node *head = NULL;
Node *tail = NULL;
for (int i = 0; i < 10; ++i)
{
push_right(&head, &tail, i);
push_left(&head, &tail, i);
}
remove_left(&head, &tail, &val);
print_all(head);
return 0;
}
Выход: -
8
7
6
5
4
3
2
1
0
0
1
2
3
4
5
6
7
8
9
Проблема здесь:
*val = temp -> data;
Val имеет значение NULL, поэтому попытка разыменования приведет к ошибке сегментации.
Если вы измените тип val на int вместо указатель на int. Затем вызовите remove_left следующим образом:
int main(int argc, char const *argv[])
{ int val = 0;
Node *head = NULL;
Node *tail = NULL;
for (int i = 0; i < 10; ++i){
push_right(&head, &tail,i);
push_left(&head, &tail,i);
}
remove_left(&head, &tail, &val);
print_all(head);
return 0;
}
Это должно работать.
print_all
: taas.trust-in-soft.com/tsnippet/t/6c9b0c3e
– Pascal Cuoq
13 July 2018 в 08:30
malloc
вgetnode()
, +1 – WedaPashi 13 July 2018 в 10:19