如何在C中插入节点 这是我根据我正在阅读的书在现有列表中间插入节点的方式。但是,它并没有真正告诉我这里如何定义pre(pre指向前置节点。)我如何定义pre指针,使其指向前置节点?

如何在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

是链接列表的主要介绍

这本书所说明的是“三步链接”

假设{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 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