在给定节点之后将新节点插入到双向链接列表中

时间:2018-08-21 23:15:51

标签: c list

此函数在双向链表中的给定节点之后插入一个新节点。

除非列表为空或给定节点为NULL,否则它会很好地工作。

我试图通过将新节点作为头插入来解决此问题,但是它没有添加新节点,也没有在添加第二个节点时出现问题。

void insert(Polynomial** node, int new_data, int pow) {
Polynomial* new_node = ( Polynomial*)malloc(sizeof( Polynomial));
new_node->num = new_data;
new_node->pow = pow;

if ((*node) == NULL) {
    new_node->prev = NULL;
    (*node) = new_node;
    return;
}

new_node->next = (*node)->next;
(*node)->next = new_node;
new_node->prev = (*node);

if (new_node->next != NULL)
    new_node->next->prev = new_node; 
}

结构:

typedef struct Polynomial {
int num;
int pow;
struct Polynomial* next;
struct Polynomial* prev;
}Polynomial;

1 个答案:

答案 0 :(得分:1)

创建新列表时,未指定第一个节点的next指针。当插入第二个节点时,这可能导致不确定的行为。您看到的0xcdcdcdcd值。返回之前将其设置为null

if ((*node) == NULL) {
    new_node->prev = new_node->next = NULL;
    (*node) = new_node;
    return;
}