...= p->next;p->next = q->next; q->next = t->next;是什么意思?_百度...
发布网友
发布时间:2024-10-03 11:44
我来回答
共3个回答
热心网友
时间:2024-10-14 02:21
*t = *p; //讲p赋给t
*p = *q; //讲q赋给p
*q = *t; //讲t赋给q
//上面三行就是交换p和q的,按你程序的意思,StudentID更小的在前面,大的往后放。
//其实这个循环就是经典的冒泡排序原理。
t->next = p->next; //将p的下一个节点交给t的下一个节点。
p->next = q->next; //将q的下一个节点交给p的下一个节点。
q->next = t->next; //将t的下一个节点交给q的下一个节点。
//这是交换p和q的下一个节点,修改next值。
//结构体可以直接赋值的,也就是第一个三行交换,不仅交换了数值StudentID,应该也同时交换了next指针,所以后面三行其实是还原next指针的,否则上面的for循环,就换乱了。简单的做法,应该可以直接交换StudentID。就不需要考虑指针链接的顺序了。
t->StudentID = p->StudentID;
p->StudentID = q->StudentID;
q->StudentID = t->StudentID;
//直接交换值StudentID
热心网友
时间:2024-10-14 02:20
对 - >下一个地址,点击看详细对 - 下一个节点>地址下一= QP = q为下一个节点p为q,则P = Q,等于移动到下一个节点在
中国,我不知道该怎么形容,我希望你能理解
热心网友
时间:2024-10-14 02:20
if (p->StudentID > q->StudentID) //当前p的id大于q的id,则交换两个结点数据
{
*t = *p;
*p = *q;
*q = *t;
//以上完成两结点数据的交换,但链表就乱了,以下,完成链表的整理
//t保存的是原来的p, p中是原来的q q中是原来的p(与t相同) 你画个图就理解了
t->next = p->next; //记录原q的后继
p->next = q->next; //修改当前的p(原q)后继,变成原p的后继
q->next = t->next; //修改当前的q(原p)后继,变为原q的后继
}