关于链接列表中节点的混淆

时间:2016-09-26 12:34:37

标签: c linked-list nodes

我对链接列表有疑问。我和一位朋友谈过,现在很困惑。 假设有两个类型为struct node的变量。一个是ptr,另一个是标题节点。

struct node
{
  int data;
  struct node *link;
};
struct node *ptr,*header;

之间有什么区别
ptr=header

ptr->link=header

ptr->link=header->link

? 编辑:我的意思是语义。

3 个答案:

答案 0 :(得分:5)

假设标头最初指向分配的节点,它看起来像

                       +----------------+-----------+
                       |                |           |
header  +----------->  |   data         |  link+-----------> other node/NULL
                       |                |           |
                       +----------------+-----------+

ptr=header之后,ptrheader都指向同一个节点

                       +----------------+-----------+
pointer +----------->  |                |           |
header  +----------->  |   data         |  link+-----------> other node/NULL
                       |                |           |
                       +----------------+-----------+

ptr->link=header之后,

                       +----------------+-----------+
pointer +----------->  |                |           |
header  +----------->  |   data         |  link+----------+ 
                +--->  |                |           |     |
                |      +----------------+-----------+     |
                +-----------------------------------------+  
ptr->link=header->link之后

,这将取决于headerptr指向的位置

  • 如果他们指向同一节点,则此语句将不起作用。
  • 如果他们指向某些不同的节点,则linkptr所指向的两个节点的header指针将指向同一节点(或NULL

                           +----------------+-----------+
                           |                |           |
    header  +----------->  |   data         |  link+--------------+                                                       |
                           |                |           |         |
                           +----------------+-----------+         +------> |
                                                                           |other node/NULL 
                                                                  +------> |
                           +----------------+-----------+         |
                           |                |           |         |
    ptr     +----------->  |   data         |  link+--------------+ 
                           |                |           |
                           +----------------+-----------+
    

答案 1 :(得分:0)

假设您只执行其中一种情况:

  • ptr=header将指向header节点。这意味着ptr的数据与header中的数据相同。 ptr->link也与header->link
  • 相同
  • ptr->link=header在列表中移动ptr header
  • ptr->link = header->link使ptrheader平行,例如:

    ptr->data != header->data; // TRUE
    a = ptr->link;
    b = header->link;
    a->data == b->data // TRUE
    

其中ab的类型为struct node*

答案 2 :(得分:0)

理解的最佳方式是将其画出来。enter image description here