【算法训练营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; }};
推荐阅读
- 小米手环1怎么用(小米手环强制恢复出厂)
- Linux Block模块之deadline调度算法代码解析
- dnf搬砖徽章怎么得(dnf继承后徽章会消除吗)
- dnf徽章怎么大量获得(dnf徽章毕业要多少钱)
- Sentinel安装教程【Linux+windows】
- 【强烈推荐】用glob库的一行命令显著加速批量读取处理数据
- 【翻译】Raft 共识算法:集群成员变更
- 原神3.1下半活动有哪些
- 飞机应该怎么打(飞机是怎么对线的)
- 扑克牌飞机的打法