添加新节点到链表中间(C语言链表问题)

来源:百度知道 编辑:UC知道 时间:2024/05/23 12:30:13
我自己看了好久 云里雾里

将节点添加到链表中间
步骤 1 在链表种,确定新元素应被加入到哪个节点的后面。我们将其称为标记节点;
2 创建一个结构实例:使用malloc()来分配内存空间;
3 将标记节点的next指针指向新元素(其地址是由malloc()返回的);
4 将新节点的next指针指向标记节点指向的节点;
代码如下:
1 person *marker;
2 ......
3 new=(LINK)malloc(sizeof(PERSON));
4 new->=next = marker -> next;
5 marker->next =new;

问题: 在第3行 有个LINK 这个是干嘛的?

你画个图 给我看看 特别要表示 第 4,5行的意思

希望画个图~~~~~
由于 我不知道 如何跟着下面人的回答 继续提问 所以只好 用问题补充 来提问

先非常感谢你 回答我(第一个回答我的人)
但是 你说的 我懂 我觉得你没有回答我要的问题
这个是你说的
link1
next ---->link2
next ---->link3
next .........linkn
next-->linko
这个我懂~~~~~~~~~~~~~~~~~
下面又是你说的

又假设marker等于linkn,新创建的结构是new,需要添加到marker后面,也就是要求达到linkn的next是new,new的next是linko的目的
添加NEW linkn
next ----> new

1.LINK是结构PERSON的指针类型,比如:
typedef PERSON * LINK;
当使用LINK时,可以举例如下:
LINK p;
PERSON per;
p = &per;
2.第4行可能是笔误吧,应该是:
new->next = marker->next;
这里无法贴图,只好写些文字来叙述了。
比如,链表是这样的:
假设link1的next是link2,link2的next是link3,以此类推,linkm的next是linkn,linkn的next是linko等等,又假设marker等于linkn,新创建的结构是new,需要添加到marker后面,也就是要求达到linkn的next是new,new的next是linko的目的,显然执行第5行和第4行分别完成上述两个目的。

不知道这样能否加深了解,呵呵。

针对你的问题补充再描述一下。
1.“又假设marker等于linkn”的意思是找到标记节点marker,并假设该节点就是linkn。原题的意思就是希望在标记节点的后面添加新的节点。
2.可能你没有正确理解next的含义。每个结构实例中的next成员表示一个地址,该地址就是链表中下一个节点的首地址,实际上就是一个长整型数。那么,执行第4行语句new->next = marker -> next;之后,节点new的next成员就获得了标记节点下一个节点的地址,而执行第5行语句marker->next =new; 之后,标记节点的next成员就被节点new的地址所取代。举个简单的例子来说:
假设link1=1000,link2=1004,...,linkn=1100,linko=1104,节点都用一个整型地址来表示,那么当它们连接成一个链表后,link1->next=link2=1004,...,linkn->next=linko=1104,又marker=linkn=1100,new=2000,执行第4行语句后new->next就从一个随机数(或称为随机地址)变为marker->next