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