两两交换链表中的节点
题目描述1
代码
c++
java
python
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
// 设置虚拟头结点
ListNode* dummyHead = new ListNode(0);
// 初始时,虚拟头结点 指向 实际链表的头结点
dummyHead->next = head;
// 当前操作的位置 指向 虚拟头结点,方便操作实际链表的头结点以及后面的节点
ListNode* cur = dummyHead;
/**开始遍历
* 遍历终止的条件,分两种情况:
* 偶数链表: cur->next = nullptr;
* 奇数链表: cur->next->next = nullptr;
*/
while (cur->next != nullptr && cur->next->next != nullptr) {
// 临时节点保存要交换的节点.
ListNode* tmp = cur->next;
ListNode* tmp1 = cur->next->next->next;
cur->next = cur->next->next;
cur->next->next = tmp;
cur->next->next->next = tmp1;
cur = cur->next->next;
}
return dummyHead->next;
}
};
int main() {
Solution solution;
ListNode ListNode7 = { 7,nullptr };
ListNode ListNode6 = { 6,&ListNode7 };
ListNode ListNode5 = { 5,&ListNode6 };
ListNode ListNode4 = { 4,&ListNode5 };
ListNode ListNode3 = { 3,&ListNode4 };
ListNode ListNode2 = { 2,&ListNode3 };
ListNode ListNode1 = { 1,&ListNode2 };
ListNode* head = &ListNode1;
ListNode* result = solution.swapPairs(head);
while (result != nullptr) {
cout << "result:" << result->val << endl;
result = result->next;
}
}