【算法训练营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; }};看完代码随想录后的想法思路差不多,忘记用虚拟头结点了,重新用虚拟头结点写了一下,ac 。
【【算法训练营day4】LeetCode24. 两两交换链表中的结点】/** * 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; }};
经验总结扩展阅读
- 异地恋的情侣靠着回忆在撑的星座
- 哪些星座眼里恋爱是尔虞我诈的暧昧游戏
- 爱的人永远遥不可及的星座
- 哪两个星座在一起最有满足感
- 2023年2月11日祭拜灶神黄道吉日 2023年2月11日祭拜灶神好吗
- 自贡酒店 自贡酒店排名
- dnf独立攻击力徽章怎么得(dnf双属性徽章怎么得)
- 2023年2月11日大扫除好不好 2023年2月11日大扫除行吗
- 适合属羊的公司名字属羊人公司取什么名字
- 阿斯匹林祛痘的用法?