2013-03-23 109 views
-1
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; 
} 

这就是我如何根据正在阅读的书籍在现有列表中插入节点。但是,它并不真正告诉我在这里如何定义prepre指向前驱节点。)如何定义pre指针,使其指向前驱节点?如何在C中插入节点C

+4

这没有足够的上下文成为一个完整的问题。 – 2013-03-23 20:11:36

+0

我想如果'curr'和'next'在链表中,那么'pre'已经指向前一个节点。 – 2013-03-23 20:12:15

+0

你可以发布你的链表的整个代码? – Bharat 2013-03-23 20:12:53

回答

2

This link是,恕我直言,链接列表的主要介绍。

什么书示出的是 “3步骤链接” ...

假设{A,B,C}的结构/节点,使得一个 ==>b ==>ç ==>NULL

然后插入NEW一个你第一个链接后立即: ==>b(这是第一个,因为如果您先重设a的指针,您将会遇到严重问题b

然后像...... 一个 ==> ...所以我们有一个 ==> ==>b ==>链接ç ==>NULL


要做到这一点,节点必须具有指针在其中......是这样的:

struct node{ 
    int i; 
    struct node* next; // this is the value that will be changed 
}; 

正如您所看到的,只要节点包含指向另一个节点的指针,节点的精确定义就无关紧要。


curr指向当前节点......所以得到“以前”,你可以创建一个免费指针到另一个节点,我认为NODE* pre是你的问题。

但是这是不必要的,因为使用->运算符比有几个指针要简单得多。您也可以使用它来指向其他节点。

因此,对于我的{a,b,c}示例,假设a,bc都是唯一的struct node s,如前所示连接。

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 

只记得在你需要在单链表中使用的节点之前设置curr

+0

感谢您的一个很好的链接 – 2013-03-23 20:24:37

+0

@ProgrammingNerd一旦你进入摆动的东西,检查出问题。有一些好的!另外,我让我的例子更彻底。 – d0rmLife 2013-03-23 21:01:36