满意答案
jackykitty
2019.09.10
采纳率:46% 等级:12
已帮助:5859人
struct list *createlist(int data[], int n)
{
//输入一个数组,n是数组的大小,返回一个内容相同的链表
struct list *head = 0, *p, *q;//head:链表头
int i;
head = (struct list *) malloc(sizeof(struct list));//建立链表头,分配空间
head->data = data[0];//往链表头填入数据data[0]
p = q = head;//这些是循环变量,p先走,q跟着,俩人从链表头一直走到链表尾
//每次循环,p和q一开始指向链表末尾的节点上。 p先走,malloc函数改变了他的值,他指向了一块新的内存空间,就是新的节点;然后q->next=p把新连起来;然后 q跟上p的步伐,q=p,相当于二者又站在了末尾的节点上。
for(i=1; i
{
p = (struct list *) malloc(sizeof(struct list));//p变成一个新的节点,给p分配空间(注意p的值被改写了,它不再是head,而是一个新的值,就是下一个节点)
p->data = data[i];//p装入数据,第一次循环它装入的是data[1],也就是紧跟着head的那个
q->next = p;//第一次循环q是head,以后每次都是q落后p一个格子。
//第一次循环相当于head->next=p,把第1个节点放在第0个节点后面。
q = p;
//第一次循环q=p,q追上p的脚步,离开head(第0
//第二次循环q=p,p又变成新的节点,相当于把第2个节点(p)放在第一个节点后面
}
p->next = NULL;//封锁野指针
return head;
}
不懂欢迎追问
00分享举报