给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/swap-nodes-in-pairs
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if (head == nullptr || head->next == nullptr)//如果链表只有一个元素或者为空,不用动
return head;
ListNode* _left = head, *_right = head->next;//指向待交换元素的两个指针
ListNode* newHead = new ListNode();//自定义头指针方便操作
newHead->next = _right;
_left->next = _right->next;//交换
_right->next = _left;
ListNode* Pointer = _left;//交换完毕后用一个指针指向靠右的结点
_left = _right;//左右归位
_right = Pointer;
//后面如果还有两个以上元素时重复以上操作
while (_right->next != nullptr && _right->next->next != nullptr)
{
_left = _right->next;
_right = _left->next;
Pointer->next = _right;
_left->next = _right->next;
_right->next = _left;
Pointer = _left;
_left = _right;
_right = Pointer;
}
return newHead->next;
}
};