网站空间在哪买好,网站设计配色方案,wordpress 下载站模板,备案的网站名称可以改吗题目链接
我自己第一遍做的时候没有想到用虚拟头节点#xff0c;就是直接进行操作#xff1a;
设置要交换的两个节点p1和p2#xff0c;还有交换需要用到的临时节点temp。进行交换后还要注意p1换到后面去之后它的指向#xff0c;它实际上是指向后面一组交换节点交换后位于…题目链接
我自己第一遍做的时候没有想到用虚拟头节点就是直接进行操作
设置要交换的两个节点p1和p2还有交换需要用到的临时节点temp。进行交换后还要注意p1换到后面去之后它的指向它实际上是指向后面一组交换节点交换后位于前面的那个节点也就是交换前处于后面节点。还要注意链表节点数为偶数和奇数时处理的不同如果是偶数则就是按照上面说的那样操作但如果是奇数当我们处理到最后一组的时候它剩下了最后一个节点并不用操作直接将交换后的p1指向最后一个节点即可。
class Solution {
public:ListNode* swapPairs(ListNode* head) {if(headnullptr || head-nextnullptr) return head;ListNode* p1 head;head head-next;while(p1!nullptr p1-next!nullptr){ListNode* p2 p1-next;ListNode* temp p2-next;p2-next p1;if(temp!nullptr temp-next!nullptr) p1-next temp-next;else p1-next temp;p1 temp;}return head;}
};看了一下代码随想录的答案是利用了虚拟头节点操作起来更加方便一点
class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode* dummyHead new ListNode(0); // 设置一个虚拟头结点dummyHead-next head; // 将虚拟头结点指向head这样方便后面做删除操作ListNode* cur dummyHead;while(cur-next ! nullptr cur-next-next ! nullptr) {ListNode* tmp cur-next; // 记录临时节点ListNode* tmp1 cur-next-next-next; // 记录临时节点cur-next cur-next-next; // 步骤一cur-next-next tmp; // 步骤二cur-next-next-next tmp1; // 步骤三cur cur-next-next; // cur移动两位准备下一轮交换}return dummyHead-next;}
};