在给定节点之后将新节点插入到双向链表中
Posted
技术标签:
【中文标题】在给定节点之后将新节点插入到双向链表中【英文标题】: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。
【参考方案1】:
当您创建一个新列表时,第一个节点的next
指针未指定。这可能会在插入第二个节点时导致未定义的行为,例如您看到的 0xcdcdcdcd
值。返回前设置为null:
if ((*node) == NULL)
new_node->prev = new_node->next = NULL;
(*node) = new_node;
return;
【讨论】:
哦,谢谢。它运作良好,我现在明白我的错误了。 :) 在声明时初始化所有变量以防止此类意外:)
以上是关于在给定节点之后将新节点插入到双向链表中的主要内容,如果未能解决你的问题,请参考以下文章