- 题目:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
说明:
你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
- 解题思路
新建odd,even指针,分别指向奇数个和偶数个节点,然后就不断交换两节点,并不断更新两指针。
代码实现(C++)
ListNode* swapPairs(ListNode* head) {
if(!head || !head->next)
return head;
ListNode* odd = head, *even = head->next;
ListNode* head1 = even;
ListNode* p = odd;
while(even && even->next)
{
ListNode* tempodd = even->next;
even->next = odd;
even = tempodd->next;
odd->next = even;
p = odd;
odd = tempodd;
}
if(odd && even) //处理最后一个节点(偶数节点情况)
{
even->next = odd;
odd->next = nullptr;
}
if(!even) //处理最后一个节点(奇数节点情况)
p->next = odd;
return head1;
}
时间:4ms