应该有一个指针指向这个链的头,否则该链中的前面部分都丢失了,无法访问,内存也无法释放。照你的方法,根本用不上链表。很混乱:
struct student *head, *p1, *p2, *p0, *p3, *p4;
p0 = &stud;
p1 = &stu;
p2 = &stu;
head = NULL;
head = p1
p2 = p1
p1 = p1 -> next;
p2 -> next = NULL;
p3 = head;
p4 = p3;
head = head -> next;
p0 -> next = p3 -> next;
p3 -> next = p0;
p3 = p3 -> next;
p4 = p4 -> next;
好在stu、stud是确定的。
要想p3指向head,head改变p3也改变,p3必须指向head本身,p3就必须是指针的指针:
struct student * * p3,* head;
*p3=&head
此时,head变了,p3当然也跟着变。
但是,你的p3是:
struct student * p3;
与head是同一类的,指向的也是实体结构的地址。
比如:
head=&stu;
p3=head;
与p3=&stu;没有区别,
此时,p3并不是指向head,而是指向了stu,当然head的改变与p3没有任何关系了。
head = head -> next;
这步是什么意思
head是指向链表的
你定义了head就说明他是不会变得
把head改成p3
p3去指向下一个节点