题意
给定一个list of nodes,要求每两个相邻的节点相互交换位置
Input: head = [1,2,3,4]
Output: [2,1,4,3]
题目链接
https://leetcode.com/problems/swap-nodes-in-pairs/description/
题解
我要交换两个节点,至少需要三个指针。对于每个节点,向前指的指针会改变,🤔后指的指针也会改变,所以我需要三个指针来解决这个问题。
比较容易错的地方是prev指针指向的位置,永远应该是每一个需要改变节点的前一个指针
/**
* 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) {
return nullptr;
}
ListNode dummy = ListNode(-1);
dummy.next = head;
ListNode* prev = &dummy;
while(prev->next && prev->next->next) {
ListNode* p1 = prev->next;
ListNode* p2 = prev->next->next;
p1->next = p2->next;
p2->next = p1;
prev->next = p2;
prev = p1;
}
return dummy.next;
}
};
时间复杂度:
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
n
)
O(n)
O(n)
944

被折叠的 条评论
为什么被折叠?



