2011-03-26 102 views
0

这是什么意思?链接列表问题

void add(struct node **root, int x) 
{ 
     struct node *conductor; 
     if(*root==NULL) 
     { 
      (*root)=malloc(sizeof(struct node)); 
      (*root)->x=x; 
      (*root)->next=NULL ;   
     } 
     else 
     { 
      conductor = *root; 
      while(conductor->next!=NULL) 
      { 
       conductor = conductor -> next;    
      }     
      conductor->next=malloc(sizeof(struct node)); 
      conductor->next->x=x; 
      conductor->next->next=NULL; 
    } 
    } 

the conductor=Conductor->next;这是什么意思?我需要喂我的好奇心,我想知道我的想法是否属实

这是我的,我只是想确定如果我的想法是正确的,我一直怀疑我的代码

+2

你以前的问题应该是关于“[你的]链表代码”(引自你以前的问题的文本......),如果你不明白这个代码,它怎么可能是你的?做你的功课,停止复制/粘贴,并开始思考一点点,以了解编程! – 2011-03-26 15:30:04

+1

代码看起来类似于此:http://www.cprogramming.com/tutorial/c/lesson15.html – mdegges 2011-10-23 01:01:00

+0

此外,如果你不明白它,就问它。当你试图保持自己,或者像这样向上时,你会放下自己。 – 2012-06-05 18:52:24

回答

1

链接列表由一系列对象构成,每个对象指向列表中的下一个元素。行conductor = conductor->next;只是将conductor变量(指向列表元素,struct node)更新为指向列表中的下一个元素。

更新:关于linked-list的维基百科文章提供了这样的数据结构的良好视觉表示。

+0

你可以提供任何图形或图案表示我的想法,它仍然模糊 – 2011-03-26 15:24:33

0

conductor -> next只是一种写作方式(*conductor).next

由于导体是指向struct,你不能直接conductor.next访问它的成员,在这种情况下,这意味着conductor现在将指向下一个元素的列表(一个conductor->next指出,前)

+0

我得到这个权利?导体=导体 - >下一个,会成为头部? – 2011-03-27 00:44:24

+0

它不会成为名单的头。头部仍然是root,但while循环会使'conductor'指向最后一个节点(当然不包括NULL)。 – MByD 2011-03-27 00:48:40

+0

换句话说,while循环实际上是这样说的:当导体不指向最后一个节点(conductor-> next!= NULL,意味着有另一个节点)使导体指向下一个节点。 – MByD 2011-03-27 00:50:44

0

conductor=*root设置指针导体以指向第一个元素列表中的根

conductor=conductor->next设置指针导体指向列表中的根的下一个元素。

与长度为1的数组相比,第一行将设置一个指向数组第0个元素的指针,而下一行将指针指向1st元素。如果这没有意义,那么您应该阅读链表,以及为什么使用它们与说数组相比。

0

根据你的要求:

conductor=conductor->next means that the means that the conductor will move 

下一个内存位置。

例如:

void insert(struct node **ptr) 
{ 
    struct node *tmp; 
    tmp=*ptr; 
    tmp=tmp->next; 
} 

TMP现在指向链表的起始内存的位置,因为我们可以将指针指向任何地方,如果它不是一个常量指针。

tmp = tmp-> next表示它指向下一个依赖于编译器的内存位置,如果指针的sizeof是4bytes,它将移动到4个字节。