• 24.两两交换链表中的节点 :::info 先根据示例画图确定好操作顺序和要缓存的量 :::

    代码:(详细注释)
    两两交换链表中的节点 - 图1

    1. //O(logn)
    2. class Solution {
    3. public:
    4. ListNode* swapPairs(ListNode* head) {
    5. ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点
    6. dummyHead->next = head; // 将虚拟头结点指向head,这样方面后面做删除操作
    7. ListNode* cur = dummyHead;
    8. while(cur->next != nullptr && cur->next->next != nullptr) {
    9. ListNode* tmp = cur->next; // 记录临时节点
    10. ListNode* tmp1 = cur->next->next->next; // 记录临时节点
    11. cur->next = cur->next->next; // 步骤一
    12. cur->next->next = tmp; // 步骤二
    13. cur->next->next->next = tmp1; // 步骤三
    14. cur = cur->next->next; // cur移动两位,准备下一轮交换
    15. }
    16. return dummyHead->next;
    17. }
    18. };

    分析:
    经典