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 点也不应该吗?

4

1 回答 1

1

我看到两个问题:

  1. 您正在更新列表中上一个节点的“下一个”指针,而不是列表中下一个节点的“上一个”指针。
  2. 您没有检查当前节点是否实际指向列表中的另一个元素。current_node->prev很可能null
于 2013-02-16T22:51:48.537 回答