首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将新节点插入到空列表中?

如何将新节点插入到空列表中?
EN

Stack Overflow用户
提问于 2012-01-26 02:11:51
回答 3查看 3.1K关注 0票数 0

我正在尝试理解Deitels第五版c语言书中的代码。

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

还有*sPtr = newPtr是什么意思?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
    }

}
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-26 02:21:43

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

票数 1
EN

Stack Overflow用户

发布于 2012-01-26 02:20:29

新节点被插入到列表的开头,因此next指向列表的开头,并且列表的开头被设置为指向新节点,例如:

如果你有b->c

如果你想插入a,首先指向b a->b->c

然后将列表设置为指向列表->a->b->c

票数 1
EN

Stack Overflow用户

发布于 2012-01-26 02:30:31

如果您指的是行newPtr->nextPtr = *sPtr,那么这是针对以下情况的代码:新数据值小于列表中已有的任何值,并且必须在开头插入节点。新节点nextPtr必须指向以前是列表中第一个节点(newPtr->nextPtr = *sPtr)的节点,并且必须将开头更改为新节点(*sPtr = newPtr)。代码在我看来没问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9013212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文