void run Node p = head; 指向头节点的指针 while p-next != p 当只剩一个节点时结束循环 for int i = 1; i m - 1; i++ 找到要删除的节点的前一个节点 p = p-next; cout p-next-data ; 输出要删除的节点的数据 N
两个比较容易出错的地方是:
- 当链表为空时,p指向head会导致程序崩溃,需要先判断链表是否为空。
- 在删除节点后,p应该指向被删除节点的下一个节点,但是原来的代码中是直接p=p->next,这样会跳过一个节点,正确的写法应该是p=p->next->next。
错误的代码如下:
void run() { Node* p = head; //指向头节点的指针 while (p->next != p) { //当只剩一个节点时结束循环 for (int i = 1; i < m - 1; i++) { //找到要删除的节点的前一个节点 p = p->next; } cout << p->next->data << " "; //输出要删除的节点的数据 Node* temp = p->next; //将要删除的节点保存到临时指针中 p->next = temp->next; //将要删除的节点从链表中删除 delete temp; //释放内存 p = p->next->next; //指向下一个节点 } cout << p->data << endl; //输出最后剩下的节点的数据 } };
原文地址: https://www.cveoy.top/t/topic/bqUA 著作权归作者所有。请勿转载和采集!