我有一个关于链表的问题。我和一个 friend 谈过,现在很困惑。 假设有两个 struct node 类型的变量。一个是ptr,一个是头节点。
struct node
{
int data;
struct node *link;
};
struct node *ptr,*header;
有什么区别
ptr=header
和
ptr->link=header
和
ptr->link=header->link
? 编辑:我的意思是语义上的。
最佳答案
假设 header 最初指向一个分配的节点,它看起来像
+----------------+-----------+
| | |
header +-----------> | data | link+-----------> other node/NULL
| | |
+----------------+-----------+
在ptr=header
之后,ptr
和header
都指向同一个节点
+----------------+-----------+
pointer +-----------> | | |
header +-----------> | data | link+-----------> other node/NULL
| | |
+----------------+-----------+
在ptr->link=header
之后,
+----------------+-----------+
pointer +-----------> | | |
header +-----------> | data | link+----------+
+---> | | | |
| +----------------+-----------+ |
+-----------------------------------------+
在 ptr->link=header->link
之后,这取决于 header
和 ptr
指向的位置
- 如果它们指向同一个节点,则此语句将无效。
如果它们指向一些不同的节点,则
ptr
和header
指向的两个节点的link
指针将指向相同的节点节点(或NULL
)。+----------------+-----------+ | | | header +-----------> | data | link+--------------+ | | | | | +----------------+-----------+ +------> | |other node/NULL +------> | +----------------+-----------+ | | | | | ptr +-----------> | data | link+--------------+ | | | +----------------+-----------+
关于关于链接列表中节点的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39702983/