在带尾指针(链表指针 clist 指向尾结点)的非空循环单链表中每个结点都以 next 字段的指针指向下一个节点。假定其中已经有 $2$ 个以上的结点。下面哪些说法是正确的:
这题考的是带尾指针的循环单链表操作。拿到题先别急着敲代码,脑子里得有个图:尾指针 clist 永远指着最后一个,最后一个的 next 却悄悄绕回第一个。抓住这个'首尾相接'的特性,再看每个选项里指针到底指哪儿,就能一眼看出缺了哪步。
最容易栽跟头的就是选项 B 和 D。尾部插入时,很多学生只改了 clist->next 就以为万事大吉,忘了把 clist 本身也得跟着挪到新结点上去;尾部删除更是重灾区,因为单向链表没法直接找前驱,若以为 clist 能直接删掉尾结点,就会漏掉'让倒数第二个结点的 next 指向头结点'这关键一步。还有,循环链表里 clist->next 就是头结点,别把它当成普通链表的头指针用,否则头部删除时 p 指错对象,整个逻辑就崩了。
带尾指针的循环单链表:
clist 永远指向最后一个结点(尾结点)next 却悄悄绕回第一个结点(头结点),形成闭环clist->next 永远存在且不是 clist 自己理解这个结构是解题关键:尾指针只知"末尾",不知"前驱";头结点只知"后继",不知"前驱"。