#include <iostream>
using namespace std;
struct Node {
Node* prev;
Node* next;
int val;
Node(int v) : prev(nullptr), next(nullptr), val(v) {}
};
/*
隐含假设主要包括:
- [first, last) 是同一个链表上的连续区间
- position 不能位于 [first, last) 区间内部
- 链表是双向循环链表,带哨兵节点
- 调用者负责保证合法性
*/
// 把 [first, last) 截取到 pos 后面
void transfer(Node* pos, Node* first, Node* last) {
last->prev->next = pos->next;
pos->next->prev = last->prev;
Node* tmp = first->prev;
tmp->next = last;
last->prev = tmp;
first->prev = pos;
pos->next = first;
}
我这个代码有错吗,怎么gpt老是说逻辑有问题,让它举反例举得又不好,说明不了我错了。deepseek说我写的没错,但是中间三句tmp的多余了。
// 把 [first, last) 截取到 pos 前面
void transfer(Node* pos, Node* first, Node* last) {
pos->prev->next = first;
Node* tmp = first->prev;
first->prev = pos->prev;
last->prev->next = pos;
pos->prev = last->prev;
tmp->next = last;
last->prev = tmp;
}
// 源码的逻辑
// 把 [first, last) 截取到 pos 前面
void transfer(Node* pos, Node* first, Node* last) {
if (pos != last) {
last->prev->next = pos;
first->prev->next = last;
pos->prev->next = first;
Node* tmp = pos->prev;
pos->prev = last->prev;
last->prev = first->prev;
first->prev = tmp;
}
}
这是把 [first, last) 截取到 pos 前面的代码,gpt也说我写的不对


// 把 [first, last) 截取到 pos 前面

我写的没毛病,gpt和deepseek都抽风了