这是我的代码:
#define V 5
typedef struct edge* link;
//structure for reprenting edges
typedef struct edge{
int dst; //number of destination node
//int weight; //for weigthed graphs
link next; //link to next edge
} edge_t;
link new_edge(int dst, link next) {
link edge = (link) malloc(sizeof(edge_t));
edge->dst = dst;
edge->next = next;
return edge;
}
int main() {
link edge;
link adj[V];
//the array contains V pointers to lists of edges
//each list for each node of my graph
int i;
int j;
//all lists are empty at beginning
for (i = 0; i < V; i ++) {
adj[i] = NULL;
}
printf("input the edges:\n");
while (scanf("%d %d", &i, &j) == 2) {
adj[i] = new_edge(j, adj[i]);
//in the list for node i
//put the edge to node j
adj[j] = new_edge(i, adj[j]); //if it is undirect
//in the list for node j
//put the edge to node i
}
printf("adjacency list is: \n");
//cycle over the nodes
for (i=0; i<V; i++) {
if (adj[i] == NULL) {
printf("%d is null list\n", i);
}
//print all the edges for that node
for (edge = adj[i]; edge != NULL; edge = edge -> next) {
printf("edge %d -> %d\n", i, edge->dst);
}
}
}
输入:
0 1
0 2
1 3
停止
输出:
邻接表是:
边缘0-> 2
边缘0-> 1
边缘1-> 3
边缘1-> 0
边缘2-> 0
边缘3-> 1
4为空列表
此图显示了我的 new_edge 函数的工作方式,蓝色区域(在图片中)正在更改,因此我可以遍历列表,所以我的问题是为什么蓝色区域等于NULL ?,导致它指向列表中的最后一项,我认为它不会为NULL(PS我遍历该列表以打印出来时确认为null)。