一般情况下,我们删除节点时是知道待删除节点的前节点和后节点。
但是对于标题中的情况,我们只知道当前节点和其后节点以及其后后节点、大后节点,反正就是不会知道其前节点。
那么怎么办呢?既然我们只熟悉在知道前节点后节点的情况,那么就我们就往这个情况上靠。
那么怎么靠呢?我们现在只知道当前节点,那么就一定知道其后面的多个节点,所以就借用其后节点,重新构建我们熟悉的前节点、待删除节点、后节点的形式。
既然要删除的节点不知道其前节点,那么就把待删除的节点和它的后节点交的数据进行交换,这样待删除的节点就有了前节点。
就可以进行删除,再进行连接。
所以设指向待删除节点的指针为p,设其后节点为q;
q=p->next;
//数据交换
temp = q->data;
q->data = p->data;
p->data = temp;
p->next = q->next;//重新建立连接
free(q);