给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路:
1.用虚拟头节点,从dummyhead开始,首先是对结束条件的判断,可以知道要想对两个节点进行交换操作,cur指向的是这两个节点的前一个节点;那么也就是说当cur指向的节点后没有节点或者只有一个节点剩下的时候就不需要做交换工作(也就是说cur->next!=nullptr&&cur->next->next!=nullptr);注意这里cur->next!=nullptr要写在前面防止空指针异常;
2.注意这里需要保存的节点有两个,因为有两个节点的指向都发生了变化,要先把这两个节点指向变化之前指向的节点保存下来;
3.做交换节点的操作,不赘述
4.更新cur
5.返回头节点
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dummyhead=new ListNode(0);
dummyhead->next=head;
ListNode* cur=dummyhead;
while(cur->next!=nullptr&&cur->next->next!=nullptr){
//先保存节点
ListNode* temp1=cur->next;
ListNode* temp2=cur->next->next->next;
//交换节点
cur->next=cur->next->next;
cur->next->next=temp1;
temp1->next=temp2;
//更新cur
cur=cur->next->next;
}
return dummyhead->next;
}
};