题目链接
题目内容
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2
输入:head = []
输出:[]
示例 3
输入:head = [1]
输出:[1]
解题思路
对于本题来说,一个带有空的头节点的链表更加方便问题的解决,因为带有空的头节点的链表中第一个节点的位置不再特殊。
我们在把题目中给出的不带空的头节点的链表构造成带有空节点的链表之后就可以按照常规手段进行循环了。
代码
/**
* 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) {
ListNode *pre = new ListNode(-1);
pre->next = head;
head = pre;
while(pre->next && pre->next->next)
{
ListNode *temp_ptr = pre->next;
pre->next = temp_ptr->next;
temp_ptr->next = pre->next->next;
pre->next->next = temp_ptr;
pre = pre->next->next;
}
return head->next;
}
};