题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表
思路
我们这题要画一下图,避免思维混乱,并且使用虚拟头结点,避免头结点要单独处理;
同时需要操作两个节点,这样必须使用临时指针存储操作的第一个结点,避免丢失,而且还要存储后续的链表,防止断链;
循环体条件不可逆,否则发生空指针异常,最后需要删除虚拟头结点,释放空间。
C++代码
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* curHead = new ListNode(0);//设置虚拟头结点
curHead->next = head;//指向头结点
ListNode* cur = curHead;//循环遍历的指针
//循环体条件不可逆,否则发生空指针异常
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->next->next;//每次操作两个,移动两个位置
}
head= curHead->next;
delete curHead;
return head;
}
};