24.两两交换链表中的结点 (Medium)*
题目描述*
给定一个链表,两两交换其中相邻的结点,并返回交换后的链表。
不能只是单纯的改变结点内部的值,而是需要实际的进行结点交换。
示例*
给定 1->2->3->4, 你应该返回 2->1->4->3.
代码*
首先创建一个新的头结点,指向 head,依次实现两两交换。
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode *newHead = new ListNode(-1);
newHead->next = head;
ListNode *p = newHead;
while(p->next != nullptr && p->next->next != nullptr) {
ListNode *l1 = p->next, *l2 = p->next->next;
l1->next = l2->next;
l2->next = l1;
p->next = l2;
p = l1; // 这里 l1 已经交换,相当于隔着跳。
}
return newHead->next;
}
};
执行用时:0ms
内存消耗:8.7MB
最后更新: July 23, 2022