早教吧 育儿知识 作业答案 考试题库 百科 知识分享

数据结构问题,不懂啊,兄弟已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,则删除P结点的直接前驱结点的语句序列是:Q=P;P=L;while(p->next->next!=Q)p=p->next;p->next=p->next->

题目详情
数据结构问题,不懂啊,兄弟
已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,
则删除P结点的直接前驱结点的语句序列是:
Q=P;
P=L;
while(p->next->next!=Q) p=p->next;
p->next=p->next->next;
free(Q);
一点不懂,分别说一下Q=P P=L……的作用,数据新手,一定采纳的,
▼优质解答
答案和解析
Q=P 就是让Q指向节点P,也就是要删除的节点.
P=L 就是让P指向链表的第一个节点.
后面的循环的作用是找到要删除的节点的前一个节点,然后让要删除的节点(现在是Q指向它)的前一个节点的指针直接指向要删节点的后一个节点(p->next=p->next->next;),相当于从链表里面移除Q.
最后删除Q(free(Q);)