gpt4 book ai didi

c - 如何将新节点插入空列表?

转载 作者:太空宇宙 更新时间:2023-11-04 07:35:57 24 4
gpt4 key购买 nike

我试图理解 Deitels 第 5 版 c 书中的这段代码。

如果我要在链表中插入一个新节点,为什么要设置 nextPtr = *sPtr。第一个节点不应该有一个 NULL 的 nextPtr 吗?

另外,*sPtr = newPtr 是什么意思?

struct listNode {
char data;
struct listNode *nextPtr;
};


void insert(ListNodePtr *sPtr, char value)
{

ListNodePtr newPtr; /* pointer to a new node */
ListNodePtr previousPtr; /* pointer to a previous a node in list */
ListNodePtr currentPtr; /* pointer to current node in list */

newPtr = malloc(sizeof(ListNode)); /* create node */

if (newPtr != NULL){ /* is space available */
newPtr->data = value;
newPtr->nextPtr = NULL;

previousPtr = NULL;
currentPtr = *sPtr;

while (currentPtr != NULL && value > currentPtr->data){
previousPtr = currentPtr;
currentPtr = currentPtr->nextPtr;
}

/* insert new node at beginning of list */
if (previousPtr == NULL){
newPtr->nextPtr = *sPtr;
*sPtr = newPtr;
} else { /* insert new node between previosuPtr and currentPtr */
previousPtr->nextPtr = newPtr;
newPtr->nextPtr = currentPtr;
}

}
}

最佳答案

第一个节点不应该将它的 nextPtr 设置为 NULL,那将是最后一个节点(毕竟你需要能够从第一个到第二个节点)。第一个节点的nextPtr 指向第二个节点,第二个节点有指向第三个节点的指针,依此类推。因此,当您在列表的开头插入时,您让新节点的 nextPtr 指向列表的旧开头,即 *sPtr。之后,通过执行 *sPtr=newPtr 将指向列表开头的指针设置为指向新节点。

关于c - 如何将新节点插入空列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9013212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com