下面是修改后的代码,实现链表查找元素值为x的元素,并将其与前驱节点交换位置:
int FindAndDel(SLinkNode*& L, int x)
{
SLinkNode* p = L->next;
SLinkNode* s = nullptr;
SLinkNode* pre = L;
while ((p != nullptr) && (p->data != x))
{
pre = p;
p = p->next;
}
if (p == nullptr)
return 0;
s = p;
if (s == L->next) // 若s为第一个节点,无需交换
return 1;
// 将s节点与其前驱节点交换位置
pre->next = s->next;
if (s->next != nullptr)
s->next->prior = pre;
pre->prior->next = s;
s->prior = pre->prior;
s->next = pre;
pre->prior = s;
return 1;
}
这样修改后,当调用FindAndDel(L, x)
时,会在链表L中查找值为x的节点,并将该节点与其前驱节点进行位置交换。如果找到了并成功交换,则返回1;若未找到,则返回0。
内容由零声教学AI助手提供,问题来源于学员提问