C链表跳过前3行



我正在研究insert_node函数,以将节点添加到链表。节点的结构如下所示:

首先,该函数会产生内存泄漏

prior_node = (Node *)malloc(sizeof(Node));

这个while循环

while(newNodePtr->grocery_item.stockNumber > traversePtr->grocery_item.stockNumber && traversePtr->next != NULL) {
prior_node = traversePtr;
traversePtr = traversePtr->next;
}

可以调用未定义的行为,因为没有检查指针traversePtr的当前值是否等于NULL。

可以用下面的方法更简单地定义函数。

void insert_node( Node **list_head_ptr, Node *newNodePtr ) 
{
while ( *list_head_ptr != NULL && 
!( newNodePtr->grocery_item.stockNumber < (*list_head_ptr)->grocery_item.stockNumber ) )
{
list_head_ptr = &( *list_head_ptr )->next;
}
newNodePtr->next = *list_head_ptr;
*list_head_ptr = newNodePtr;
}

相关内容

  • 没有找到相关文章

最新更新