/**
* 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* dummyHead = new ListNode(); //虚拟头结点
dummyHead -> next = head;
ListNode* pre = dummyHead; //pre指向当前操作的节点对之前的一对节点的尾结点
ListNode* cur = head; //cur指向当前操作的节点对的头结点
ListNode* next = head -> next; // next指向当前操作的节点对的尾结点
while(cur){
if(next) pre -> next = next; //若当前操作节点对尾结点存在,则令pre指向它
pre = cur; //更新pre = 当前操作节点对的头结点(后续要交换顺序变更为尾结点)
if(next) cur -> next = next -> next; //若当前操作节点对尾结点存在,则令cur指向下一对节点的头结点
if(next) {next -> next = cur;} //若当前操作节点对尾结点存在,则令next指向当前头结点cur
cur = cur -> next; //更新当前头结点为下一对的头结点
if(cur) next = cur -> next; //若下一对头结点存在,则更新next = 下一对的尾结点
}
return dummyHead -> next;
}
};
<Talk is cheap, show me the code 36> LeetCode.24 两两交换链表中的节点
最新推荐文章于 2024-09-10 23:34:31 发布