2013-02-16 45 views
0

我在C语言中使自己的某些代码段发疯,我希望进行干预。我有:指针混淆指针,以及列表之间的节点转移

typedef struct node{ 
int value;  
node_t *next; 
node_t *prev; 
} node_t; 

node_t current_node;  
node_t other_list; 

void transfer(node_t **ipp) 
{ 
    if (*ipp == NULL) 
    { 
    *ipp = current_node; 
    current_node->prev->next = current_node->next; 
    } 
    else 
    { 
    (*ipp)->next = current_node; 
    ipp = &(*ipp)->next; 
    current_node->prev->next = current_node->next; 
    } 
} 

int main(void) 
{ 
int i; 
for(i= 0; i< 10; i++) 
{ 
    transfer(&other_list); 
    current_node = current_node->next; 
} 

不应该我现在能够从第一个列表中删除项目,并将它们转移到第二个?还应该插入最后一个节点的other_list点?

+0

你能更明确地表达你的问题吗?你期望发生什么?发生了什么呢? – cnicutar 2013-02-16 22:48:37

回答

1

我看到两个问题:

  1. 要更新列表中的前一个节点,但在列表中的下一个节点的不是“上一个”指针“下一个”指针。
  2. 您不检查当前节点是否实际指向列表中的另一个元素。 current_node->prev很可能是null
+0

对不起你。我没有提到current_node是节点环中的一个节点。我的目标是通过将它们转移到other_list节点来逐个删除所有这些节点。我期望other_list总是指向插入的最后一个节点。我的打印输出表明我可以传输多个节点,但不是全部,并且other_list总是指向插入的第一个节点。 – stian 2013-02-16 23:05:25

+0

谢谢。我想我必须添加(在current_node-> prev-> next = ...之后)current_node-> prev-> next-> prev = current_node-> prev。 – stian 2013-02-16 23:39:54