用c➕➕给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)输入:head = [1,2,3,4] 输出:[2,1,4,3]
时间: 2024-11-13 17:21:55 浏览: 18
这是一个常见的链表操作题目,通常通过迭代或递归的方式来解决,因为我们需要遍历链表并保持对相邻节点的引用。以下是使用C++的一个简单迭代解决方案:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* swapNodes(ListNode* head) {
if (head == nullptr || head->next == nullptr) return head; // 如果链表为空或只有一个元素,无需交换
ListNode dummy(0); // 创建一个虚拟头节点,用于简化边界处理
dummy.next = head;
ListNode* prev = &dummy;
ListNode* curr = head->next;
while (curr != nullptr) {
ListNode* nextTemp = curr->next;
// 交换相邻节点
curr->next = prev->next;
prev->next = curr;
prev = curr;
curr = nextTemp;
}
return dummy.next; // 返回交换后的链表头节点
}
```
输入 `head = [1,2,3,4]` 后,调用 `swapNodes(head)` 将得到输出 `[2,1,4,3]`。
阅读全文