两个比较容易出错的地方是:

  1. 当链表为空时,p指向head会导致程序崩溃,需要先判断链表是否为空。
  2. 在删除节点后,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; //输出最后剩下的节点的数据 } };

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

原文地址: https://www.cveoy.top/t/topic/bqUA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录