此函数在双向链表中的给定节点之后插入一个新节点。
除非列表为空或给定节点为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;
答案 0 :(得分:1)
创建新列表时,未指定第一个节点的next
指针。当插入第二个节点时,这可能导致不确定的行为。您看到的0xcdcdcdcd
值。返回之前将其设置为null
if ((*node) == NULL) {
new_node->prev = new_node->next = NULL;
(*node) = new_node;
return;
}