题意:给定一个list of nodes,要求交换相邻的两个节点
https://leetcode.com/problems/swap-nodes-in-pairs/description/
Input: head = [1,2,3,4]
Output: [2,1,4,3]
首先你需要思考,我要交换两个节点,对于每个节点,向前指的指针会改变,🤔后指的指针也会改变,所以我需要三个指针来解决这个问题。
比较容易错的地方是prev指针指向的位置,永远应该是每一个需要改变节点的前一个指针
cpp
/**
* 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;
}
};