链接列表创建

时间:2011-12-14 11:52:32

标签: c graph linked-list adjacency-list

我正在尝试使用邻接列表来表示图形,但我遇到了指针问题。

typedef struct vertex{
    int num;
    struct vertex *next;
} Vertex;

Vertex *adj[10];

void build(){
    Vertex *v=NULL;
    Vertex *t=NULL;
    v = malloc(1*sizeof(*v));

    v->num = 1;
    adj[0] = v;  //NODE with value 1
    t = v;

    v = malloc(1*sizeof(*v));
    v->num = 1;
    t->next = v; // ANOTHER NODE but it should be the SAME NODE with the above one
    t = v;

    //v = malloc(1*sizeof(*v));
    //v->num = 1;
    //t->next = adj[0]; // causes infinite loop...
    //t = v;

    v = malloc(1*sizeof(*v));
    v->num = 2;
    t->next = v;
    t = v;
}

我正在努力建立的实际上很简单。 1 - > 1,2。但是我写的代码不起作用。可能是什么问题?

编辑:好的,我纠正了NULL。 预期输出为1 - >> 1,2。具有2个节点1的图形指向其自身并指向具有值2的下一个节点。 我的问题是在获得列表后创建图表1 - > 1,2;看起来我有3个不同的节点。我的意思是后来当我用1到3更改节点的值时,我得到3 - > 1,2但由于我只应该有2个节点,所以期望的输出应该是3 - >在我做出改变之后3,2。

2 个答案:

答案 0 :(得分:2)

t = NULL;       
v = malloc(1*sizeof(*v));    
v->num = 2;     
t->next = v;    //This is basically dereferencing a NULL pointer

在将t设置为导致未定义行为NULL之后,您将其解除引用。

另外,你应该告诉我们:
 预期产量是多少?
你得到的输出是什么?

如果没有这些信息,除非向您指出明显的使用错误,否则很难说出您做错了什么。

答案 1 :(得分:1)

你在几个地方捣毁t。特别是t = v;,您在其他任何地方都没有原始值。