第二十四题 :两两交换链表中的节点
解题思路:每两个变换一次就可以了,直接迭代下去就可以了,题目虽然是中等的难度,但是还是比较简单的,
对链表操作不太熟悉的可以,画图来简单理解就可以。 迭代的时间复杂度0(n)。
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) {}
};
ListNode* swapPairs(ListNode* head) {
if (head ==NULL || head->next == NULL)
{
return head;
}
ListNode* nowHead = new ListNode();
nowHead->next = head;
ListNode* curNode = nowHead;
while (curNode->next != NULL
&& curNode->next->next != NULL)
{
ListNode* curNode1 = curNode->next;
ListNode* curNode2 = curNode->next->next;
curNode->next = curNode2;
curNode1->next = curNode2->next;
curNode2->next = curNode1;
curNode = curNode1;
}
return nowHead->next;
}
还有一个方式就是递归了,写起来就很方便了:
ListNode* swapPairs2(ListNode* head)
{
if (head == NULL || head->next == NULL)
{
return head;
}
ListNode * nowHead = head->next;
head->next = swapPairs2(nowHead->next);
nowHead->next = head;
return nowHead;
}
输出都能满足结果。