国家批准的正规学历提升机构,杭州百度百家号seo优化排名,有哪些网站是做采购招标的,银行营销技巧和营销方法题目描述
给你一个链表#xff0c;两两交换其中相邻的节点#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题#xff08;即#xff0c;只能进行节点交换#xff09;。
示例 1#xff1a;
输入#xff1a;head [1,2,3,4]
输出#…题目描述
给你一个链表两两交换其中相邻的节点并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题即只能进行节点交换。
示例 1
输入head [1,2,3,4]
输出[2,1,4,3]示例 2
输入head []
输出[]示例 3
输入head [1]
输出[1]提示
链表中节点的数目在范围 [0, 100] 内
0 Node.val 100思路分析
每次我自己想的时候都考虑很多很多种情况。不如拿出两个或者四个节点草稿纸上演示一遍它的具体流程同时也能够判断while循环的终止条件。 1、首先会想到使用一个dummyHead 2、判断终止条件的时候分奇数和偶数进而退出cur-next!nullptr 并且 cur-next-next!nullptr顺序也不能反 3、想到了使用tmp保存节点cur-next为什么不能想到tmp1保存cur-next-next-next 4、演示一遍流程代码自然就写出来了。
/*** Definition for singly-linked list.* 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) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode* dummyHead new ListNode(0); // 设置一个虚拟头结点dummyHead-next 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;tmp-next tmp1;cur cur-next-next;}return dummyHead-next;}
};