【算法训练营day4】LeetCode24. 两两交换链表中的结点

【算法训练营day4】LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表IILeetCode24. 两两交换链表中的节点题目链接:24. 两两交换链表中的节点
初次尝试比较暴力的解法,利用三个指针,进行类似反转链表里面的反转next指针指向的操作 , 然后三个指针整体向后移动到下一组节点,暴力但是ac 。
/** * Definition for singly-linked list. * 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) {        if (head == NULL || head -> next == NULL) return head;        ListNode* pre = head;        ListNode* cur = head -> next;        ListNode* temp = cur -> next;        head = head -> next;        while (true) {            cur -> next = pre;            pre -> next = temp;            if (temp != NULL && temp -> next != NULL) {                cur = temp -> next;                pre -> next = cur;                pre = temp;                temp = cur -> next;            }            else break;        }        return head;    }};看完代码随想录后的想法【【算法训练营day4】LeetCode24. 两两交换链表中的结点】思路差不多,忘记用虚拟头结点了,重新用虚拟头结点写了一下,ac 。
/** * Definition for singly-linked list. * 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) {        if (head == NULL || head -> next == NULL) return head;        ListNode* dummyHead = new ListNode(0, head);        ListNode* cur = dummyHead;        while (cur -> next != NULL && cur -> next -> next != NULL) {            ListNode* temp1 = cur -> next;            ListNode* temp2 = cur -> next -> next;            cur -> next = temp2;            temp1 -> next = temp2 -> next;            temp2 -> next = temp1;            cur = cur -> next -> next;        }        return dummyHead -> next;    }};

推荐阅读