如何在C中插入节点 这是我根据我正在阅读的书在现有列表中间插入节点的方式。但是,它并没有真正告诉我这里如何定义pre(pre指向前置节点。)我如何定义pre指针,使其指向前置节点?
是链接列表的主要介绍 这本书所说明的是“三步链接” 假设{a,b,c}是结构/节点,使得a=>b=>c==>为空 然后,要在a之后立即插入NEW,请首先链接:NEW==>b(这是第一步,因为如果先重置a的指针,您将很难到达b 然后将a链接到NEW,比如…a=>NEW…因此我们有a=>NEW=>b=>c=>空值如何在C中插入节点 这是我根据我正在阅读的书在现有列表中间插入节点的方式。但是,它并没有真正告诉我这里如何定义pre(pre指向前置节点。)我如何定义pre指针,使其指向前置节点?,c,linked-list,C,Linked List,是链接列表的主要介绍 这本书所说明的是“三步链接” 假设{a,b,c}是结构/节点,使得a=>b=>c==>为空 然后,要在a之后立即插入NEW,请首先链接:NEW==>b(这是第一步,因为如果先重置a的指针,您将很难到达b 然后将a链接到NEW,比如…a=>NEW…因此我们有a=>NEW=>b=>c=>空值 要做到这一点,节点中必须有指针……类似于: NODE* insertNode (NODE* head, NODE* pre, DATA item) { //Local Declarati
要做到这一点,节点中必须有指针……类似于:
NODE* insertNode (NODE* head, NODE* pre, DATA item)
{
//Local Declaration
NODE* curr;
//Statement
if (!(curr = (NODE*)malloc(sizeof(NODE)))
printf("\amemory overflow in insert\n");
curr->data = item;
if (pre == NULL)
{
//inserting before first node or to empty list
curr->next = head;
head = curr;
}
else
{
//inserting in middle or at the end
curr->next = pre->next;
pre->next = curr;
}
return head;
}
如您所见,节点的精确定义并不重要,只要它包含指向另一个节点的指针
curr
指向当前节点…因此要获得“previous”,您可以创建一个指向另一个节点的补充指针,,因为我假设您的问题是node*pre
但实际上这是不必要的,因为只使用->
操作符比使用多个指针要简单得多。您也可以使用它来指向其他节点
因此,对于我的{a,b,c}示例,假设a
,b
和c
都是唯一的struct节点
s,如前所示连接
struct node{
int i;
struct node* next; // this is the value that will be changed
};
只需记住在单个链接列表中需要处理的节点之前设置
curr
。这没有足够的上下文作为完整的问题。我认为如果curr
和next
在链接列表中,那么pre
已经指向现在的上一个节点。你能发布链接列表的全部代码吗?打开一个双链接列表有一个pre
。@RichardJ.RossIII这是全部code@ProgrammingNerd一旦你开始思考问题,看看问题所在。这里有一些好问题!而且,我把我的例子做得更透彻了一点。
struct node* curr = a; // a pointer to the head of the list
struct node NEW = malloc(sizeof(struct node)); // make a new node
NEW->next = curr->next; // set NEW's next to point to b through `curr->next`
/* note that defining previous isn't necessary, b/c it is defined @ curr->next */
curr->next = NEW; // set curr (a) to point to NEW instead of b