24. 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
思考过程:交换链表元素,需要知道操作元素的前后指向,预设两个变量暂存前后节点,本道题中,前节点为某组待交换节点中第一个前驱节点,后节点为某组待交换节点中后一个的后继节点。两两交换,遍历指针需间隔两个链表元素进行跳跃,必须保证遍历指针后两个指针均不为空。
参考卡哥文章完善后的代码如下:
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dummyNode = new ListNode(0);
dummyNode->next = head;
ListNode* cur = dummyNode;
while((cur->next != nullptr) && (cur->next->next != nullptr)){
ListNode* tem0 = cur->next;
ListNode* tem1 = cur->next->next->next;
cur->next = cur->next->next;
cur->next->next = tem0;
cur->next->next->next = tem1;
cur = cur->next->next;
}
return dummyNode->next;
}