1、题目描述+解释
2、算法原理解析
3、代码编写
/**
* 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==nullptr)
// {
// return head;
// }
// if(head->next==nullptr)
// {
// return head;
// }
if(head==nullptr||head->next==nullptr)
{
return head;
}
//先创建一个头结点
ListNode* NewHead=new ListNode(0);
//定义四个指针
ListNode* prev=NewHead;
ListNode* prev_next=head;
ListNode* ptail_prev=head->next;
ListNode* ptail=ptail_prev->next;
//结束条件分奇偶,可得出第二个指针和第三个指针为空就结束
while(prev_next&&ptail_prev)
{
prev->next=ptail_prev;
ptail_prev->next=prev_next;
prev_next->next=ptail;
//改变,注意空节点情况
prev=prev_next;
prev_next=prev_next->next;
if(prev_next)
{
ptail_prev=prev_next->next;
}
if(ptail_prev)
{
ptail=ptail_prev->next;
}
}
prev=NewHead->next;
delete NewHead;
return prev;
}
};