题解:
/**
* 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:
// 1. start->p1->p2->end
// 2. p1和p2表示要交换的两个节点,我们需要借助start和end两个节点来辅助完成交换;
ListNode* swapPairs(ListNode* head) {
ListNode *start,*p1,*p2,*end;
p1=head;
start=head;
// 每两个节点作为一对处理
while(p1!=nullptr){
if(p1->next==nullptr) break;
// 情况1:head节点需要特殊处理,因为这种情况p1没有前驱节点
if(start==head){
p2=p1->next;
end=p2->next;
p1->next=end;
p2->next=p1;
head=p2;
}
// 情况2:需要交换的两个节点在链表的中间部分
else{
p2=p1->next;
end=p2->next;
p1->next=end;
p2->next=p1;
start->next=p2;
}
// 下一对节点
start=p1;
p1=p1->next;
}
return head;
}
};
递归:
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return head;
}
ListNode* newHead = head->next;
head->next = swapPairs(newHead->next);
newHead->next = head;
return newHead;
}
};
《夺冠》影片讲述了中国女排从1981年首夺世界冠军到2016年里约奥运会生死攸关的中巴大战,诠释了几代女排人历经浮沉却始终不屈不挠、不断拼搏的传奇经历。