1

我正在努力理解 C 中链表中的节点的某些内容。我在纸上得到了一个包含 6 个节点的列表,我试图画出在几组不同的命令之后节点是如何变化的。该列表开始如下(如果一个节点被命名,该名称就列在它之前):

head[2, 链接]-->[4, 链接]-->P[6, 链接]-->[7,链接]-->Q[8, 链接]-->R[9, 链接为空]

第一组命令:

R->link = Q;
head->item = 11;
P = P->link;

head[11, 链接]-->[4, 链接]-->[6, 链接]-->P[7,链接]-->Q[8, 链接]-->R[9, 链接]- ->问

这是我的第一个问题:当您将 R->link 分配给 Q 时,它是否只是围绕自身指向 Q 节点?

第二组命令:

P->item = head->item;
Q = NULL;
P = (P->link)->link;
head = R;

[11,链接]-->[4,链接]-->[6,链接]-->[11,链接]-->Q[NULL?]-->公关头[9,链接]-->问空?

第二个问题:Q节点中的null值究竟是什么?它的链接会消失吗?P = (P->link)->link 设置为null后如何沿其链接移动?现在 Q 为空,R 也指向什么?

我创建节点的代码如下:

#include <stdio.h>
#include <stdlib.h>

typedef int item_t;
typedef struct node node_t;
typedef node_t* pointer_t;


struct node{
       item_t item;
       pointer_t link;
       };

int main(void){

    pointer_t head, P, Q, R;

    head = malloc(sizeof(node_t));
    head->item = 2;
4

1 回答 1

2

答案 1:是的,该操作会在列表中创建一个循环,并且会在以后引起头痛。实际上,在第一组命令之后,您的列表变为:

head[11,link]-->[4,link]-->[6,link]-->P[7,link]-->Q[8,link]-->R[9,link]--+
                                                    ^-----------<--------+ 

答案 2:设置Q = NULL不会改变列表。您只是在修改一个不相关的指针,而不是列表中的任何链接。您的清单现在是:

[11,link]-->[4,link]-->[6,link]-->[11,link]-->[8,link]-->P,R,head[9,link]--+
                                               ^----------------<----------+ 

请记住,P, Q, R, head所有指针都指向链表中的元素,更改它们只会更改它们指向的内容,它们不会更改链表的结构。

于 2013-05-08T00:46:16.897 回答