我对链接列表有疑问。我和一位朋友谈过,现在很困惑。 假设有两个类型为struct node的变量。一个是ptr,另一个是标题节点。
struct node
{
int data;
struct node *link;
};
struct node *ptr,*header;
之间有什么区别
ptr=header
和
ptr->link=header
和
ptr->link=header->link
? 编辑:我的意思是语义。
答案 0 :(得分:5)
假设标头最初指向分配的节点,它看起来像
+----------------+-----------+
| | |
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
指向的位置
如果他们指向某些不同的节点,则link
和ptr
所指向的两个节点的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
使ptr
与header
平行,例如:
ptr->data != header->data; // TRUE
a = ptr->link;
b = header->link;
a->data == b->data // TRUE
其中a
和b
的类型为struct node*
答案 2 :(得分:0)