基本思路
实际上的操作见下,就是需要了解的是需要拥有存储临时节点的思想,对于数组来说实际上双指针可以解决绝大多数的问题,但是对于链式结构来说,需要多几个暂存点,这需要重点关注。
leetcode 24 两两交换链表中的元素
/**
* 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) {
//定义一个虚拟头节点用于方便操作
ListNode* dummyhead = new ListNode(0,head);
ListNode* cur = dummyhead;
ListNode* temp1;
ListNode* temp2;
while(cur->next && cur->next->next)
{
//先存储1
temp1 = cur->next;
//然后储存3
temp2 = cur->next->next->next;
//前一个节点指向2
cur->next = cur->next->next;
//2号节点指向1
cur->next->next = temp1;
//1号节点指向3
temp1->next = temp2;
//更新cur促进循环,此时cur应该指向1(更新完后dummpy->2->1->3 等等)
cur = cur->next->next;
}
return dummyhead->next;
}
};