Проблема этого кода является то, что после того, как матрица была преобразована в массив связанных списков, похоже, никакого значения не содержится в массиве связанных списков. Я думаю, что проблема заключается в функции, которая добавляет узел в определенный список массива связанных списков.
// node
struct node {
int n;
struct node* next_ptr;
};
// prototypes
void fill_mat(int mat[][SIZE]);
void mat_to_list(int mat[][SIZE]);
void insertSortedLinkedList(struct node *l, int value);
void print_mat(int mat[][SIZE]);
void print_vet();
// array of pointers
struct node* vet[SIZE];
int visitato[SIZE];
// main function
int main(int argc, const char *argv[]) {
int mat[SIZE][SIZE];
int i, j;
// reset the matrix
for(i = 0; i < SIZE; ++i) {
for(j = 0; j < SIZE; ++j) {
mat[i][j] = 0;
}
}
// generate graph with weights
srand(time(NULL));
fill_mat(mat);
// transform matrix in an array of linked lists
mat_to_list(mat);
print_mat(mat);
printf("\n");
print_vet();
return 0;
}
// generate graph
void fill_mat(int mat[][SIZE]) {
int x, y, z;
for(x = 0; x < (SIZE * SIZE)/2;) {
y = rand() % SIZE;
z = rand() % SIZE;
if(mat[y][z] == 0) {
mat[y][z] = rand() % 10 + 1;
++x;
}
}
}
// insert in list
void addNode(struct node **st, int d) {
struct node *temp = *st;
if(temp == NULL) {
temp = malloc(sizeof(struct node));
} else {
while((temp)->next_ptr != NULL) {
temp = temp->next_ptr;
}
temp->next_ptr = malloc(sizeof(struct node));
temp = temp->next_ptr;
}
temp->n = d; // this must done using strncpy
temp->next_ptr = NULL;
}
// transform matrix to array of linked lists
void mat_to_list(int mat[][SIZE]) {
int i, j;
// reset array
for(i = 0; i < SIZE; ++i) {
vet[i] = NULL;
}
for(i = 0; i < SIZE; ++i) {
for(j = 0; j < SIZE; ++j) {
if(mat[i][j] != 0) {
addNode(&(vet[i]), mat[i][j]);
}
}
}
}
// print matrix
void print_mat(int mat[][SIZE]) {
int i, j
;
for(i = 0; i < SIZE; ++i) {
for(j = 0; j < SIZE; ++j) {
printf("%-2d ", mat[i][j]);
}
printf("\n");
}
}
// print array of linked lists
void print_vet() {
int i;
struct node* temp;
for(i = 0; i < SIZE; ++i) {
printf("ARRAY CELL: %d\n", i);
temp = vet[i];
while(temp != NULL) {
printf("NODE VALUE --> ");
printf("%d\n", temp->n);
temp = temp->next_ptr;
}
printf("\n");
}
}
'* й = (* й) -> next_ptr' Вы модифицируя исходный указатель. Вам нужно использовать переменную tmp для обхода списка. – kaylum
Вы можете написать код для переменной temp? – ZwartyZ
Предоставьте [mcve] и см. [Ask]. – Olaf