Итак, что я пытаюсь сделать, так это скопировать связанный список, который я создал, и для этого я знаю, что мне нужно пересечь список.
Проблема в том, что если я сделаю первую копию, она работает, но если я сделаю копию копии или другой копии, это даст ошибку сегментации, и я не понимаю, почему.
Программа:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Node {
int v;
struct Node* next;
}link;
link* insert(link* head,int data)
{
link* x;
if (head == NULL)
{
link *new = (link*) malloc(sizeof(struct Node));
new->v = data;
new->next = NULL;
return new;
}
for(x = head; x->next != NULL; x = x->next);
link *new = (link*) malloc(sizeof(struct Node));
new->v = data;
new->next = NULL;
x->next = new;
return head;
}
void print_lst(link* head)
{
link* t;
for (t = head; t != NULL; t = t->next)
printf("* %d\n",t->v);
}
link* copy_lst(const link* head)
{
const link* x;
link *copy;
if (head == NULL)
{
return NULL;
}
for(x = head; x->next != NULL; x = x->next)
{
copy->v = x->v;
copy->next = x->next;
}
return copy;
}
int main()
{
link *head = NULL;
head = insert(head,5);
head = insert(head,6);
link *head2 = NULL;
head2 = copy_lst(head);
print_lst(head2);
link *head3 = copy_lst(head2);
return 0;
}