给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs
具体没啥好说的,就是一个两两交换位置。注意的一点是要用到3个指针。且注意第一次交换之后头结点会变。
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if (head == NULL) return head;
auto keep_pre = new ListNode(-1); //创建一个虚拟头结点
keep_pre->next = head;
auto first = head -> next;
auto end = head;
if (head->next != NULL) head = head ->next;
while(first){
end->next = first->next;
first->next = end;
keep_pre->next = first;
keep_pre = end;
end = end -> next;
if (end != NULL)
first = end -> next;
else
first = NULL;
}
return head;
}
};