题目:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100
解答:
自己的代码,使用三个ListNode*,pFront,p1,p2,三个节点的交换逻辑如下:
//swap
pFront->next = p2->next;
p2->next = p1;
p1->next = pFront->next;
pFront->next = p2;
//24. 两两交换链表中的节点 ListNode* swapPairs(ListNode* head) { if (head == nullptr) return nullptr; ListNode dummy; dummy.next = head; ListNode*pFront = &dummy; ListNode* p1 = pFront->next, *p2=nullptr; while (pFront != nullptr) { p1 = pFront->next; if (p1 == nullptr) break; p2 = p1->next; if (p2 == nullptr) break; //swap pFront->next = p2->next; p2->next = p1; p1->next = pFront->next; pFront->next = p2; //next pFront = p2->next; } return dummy.next; }
一次提交后超过100%,好开心O(∩_∩)O哈哈~
题解:https://leetcode-cn.com/problems/swap-nodes-in-pairs/solution/liang-liang-jiao-huan-lian-biao-zhong-de-jie-di-91/
题解中提供了两种解法:递归,迭代,自己写的思路与迭代思路类似。(自己都过了,题解就不看了哈)