【问题标题】:Inserting a new node into a doubly linked list after a given node在给定节点之后将新节点插入到双向链表中
【发布时间】:2018-08-21 23:15:51
【问题描述】:

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

除非列表为空或给定节点为 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;

【问题讨论】:

  • node = new_node 仅更改 local 变量 node,因此您的函数不会修改传递给它的节点指针的值。
  • 现在尝试使用指向指针的指针,头节点可以工作,但是在将第二个节点添加到列表中时它不起作用。
  • 显示新代码。 “它不起作用”不是有效的问题描述。
  • 用新代码编辑了问题
  • 我不断收到 new_node->下一个是 0xCDCDCDCD。

标签: c list


【解决方案1】:

当您创建一个新列表时,第一个节点的next 指针未指定。这可能会在插入第二个节点时导致未定义的行为,例如您看到的 0xcdcdcdcd 值。返回前设置为null:

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

【讨论】:

  • 哦,谢谢。它运作良好,我现在明白我的错误了。 :)
  • 在声明时初始化所有变量以防止此类意外:)
猜你喜欢
  • 1970-01-01
  • 2019-03-14
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2016-04-29
相关资源
最近更新 更多