在发现某次输入位置不合法后输出”error”并且跳过该次移动的打印结果,可以对moveElement函数进行修改。具体修改如下:
void moveElement(ListNode* head, int currentPos, int targetPos) {
if (currentPos == targetPos || head == nullptr || head->next == nullptr) {
return;
}
// 获取待移动的节点和其前一个节点
ListNode* prevNode1 = nullptr; // 待移动节点的前一个节点
ListNode* currentNode1 = head; // 待移动节点
while (currentNode1 != nullptr && currentPos > 0) {
prevNode1 = currentNode1;
currentNode1 = currentNode1->next;
currentPos--;
}
if (currentNode1 == nullptr) {
cout << "error" << endl;
return;
}
ListNode* prevNode2 = nullptr; // 目标位置节点的前一个节点
ListNode* currentNode2 = head; // 目标位置节点
while (currentNode2 != nullptr && targetPos > 0) {
prevNode2 = currentNode2;
currentNode2 = currentNode2->next;
targetPos--;
}
if (currentNode2 == nullptr) {
cout << "error" << endl;
return;
}
// 移动节点
if (prevNode1 != nullptr) {
prevNode1->next = currentNode1->next;
// 检查目标位置是否合法
if (prevNode2 == nullptr){
cout << "error" << endl;
return;
}
prevNode2->next = currentNode1;
currentNode1->next = currentNode2;
}
else {
head->next = currentNode1;
// 检查目标位置是否合法
if (prevNode2 != nullptr) {
prevNode2->next = currentNode1;
currentNode1->next = currentNode2;
} else {
cout << "error" << endl;
return;
}
}
}
这样,在发现某次输入位置不合法后,会输出”error”并跳过该次移动的打印结果。
内容由零声教学AI助手提供,问题来源于学员提问




