2011-12-14 133 views
0

我想用邻接表来表示一个图,但是我遇到了指针问题。链接列表创建

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。

+0

将t设置为v后,您将t设置为NULL。 – wildplasser 2011-12-14 11:56:29

+0

您不应该完全改变问题的基础。接受答案并提交另一个后续问题。然后添加完整的(尽管不超过必要的)代码。 – moooeeeep 2011-12-14 12:36:32

回答

1

你在几个地方捣毁t。特别是对于t = v;,您没有其他地方的原始价值。

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

你将它设置为NULL引起未定义行为后提领t

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

没有这些信息,除了向您指出明显的使用错误外,很难判断您做错了什么。