下面是修改后的代码,用于交换链表的最后两个节点:
”`cpp void Swap(SLinkNode*& L) {
if (L == NULL || L->next == NULL) {
return; // 链表为空或只有一个节点,无需交换
}
SLinkNode* pre = NULL;
SLinkNode* p = L;
while (p->next != NULL) {
pre = p;
p = p->next;
}
SLinkNode* last1 = pre; // 倒数第二个节点
SLinkNode* last2 = p; // 最后一个节点
if (last1 == last2) {
return; // 链表中只有两个相同的节点,无需交换
}
if (last1->prior == NULL) {
L = last2; // 若倒数第二个节点为头结点,则更新头指针
} else {
last1->prior->next = last2;
}
if (last2->next != NULL) {
last2->next->prior = last1;
}
last2->prior = last1->prior;
if (last1->next == last2) { // 相邻节点情况
last1->next = last2->next;
last2->next = last1;
if (last1->next != NULL) {
last1->next->prior = last1;
}
} else { // 不相邻节点情况
SLinkNode* tmpNext = last1->next;
last1->next = last2->next;
last2->nex<br/><br/><br/><font size=1 color=#CCCCCC>内容由零声教学AI助手提供,问题来源于学员提问</font>