上海未成年人思想道德建设网站,数字币网站开发,西安网站建设APP开发,免费做房产网站有哪些题目链接
力扣#xff08;LeetCode#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 首先可以特判一下#xff0c;如果结点数目小于等于1#xff0c;则直接返回即可#xff0c;因为数目小于等于1就不需要交换了。 然后我们可以创建一个虚拟的头结点#xff0c;然…题目链接
力扣LeetCode官网 - 全球极客挚爱的技术成长平台 题目解析 首先可以特判一下如果结点数目小于等于1则直接返回即可因为数目小于等于1就不需要交换了。 然后我们可以创建一个虚拟的头结点然后如图所示定义几个结点指针经过图中的顺序进行交换结点然后将结点依次向后遍历。 同时我们也要注意cur和next不能为nullptr若为nullptr就不需要交换。 代码
/*** 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) {if(headnullptr||head-nextnullptr) return head;ListNode* pheadnew ListNode(-1);phead-nexthead;// head-1-2-3-4//prev-cur-next-nnext// head-2-1-4-3//prev-next-cur-nnextListNode*prevphead,*curphead-next,*nextcur-next,*nnextnext-next;ListNode* ansphead-next;// 注意cur和next不能为nullptrwhile(curnext){// 交换结点prev-nextnext;next-nextcur;cur-nextnnext;// 修改指针// 一定注意顺序prevcur;curnnext;// 注意cur和next不能为nullptrif(cur) nextcur-next;if(next) nnextnext-next;}curphead-next;delete phead;return cur;}
};