两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
想法一:从这两个例子(反转链表)当中我们可以看出来一般对链表进行操作的时候增加一个空头的好处很多(可以解决多余一个指针的指向问题),所以这个题目仍然是这样的:
class Solution { public: ListNode* swapPairs(ListNode* head) { ListNode* newnode = new ListNode(0);//新建一个空头 newnode->next = head;//空头加入这个链表 ListNode* cur = newnode;//下面开始对这个链表进行操作,需要一个操作节点 while (cur->next != NULL && cur->next->next != NULL) {//至少要有三个节点才能进行操作 ListNode* onode = cur->next;//接下来的三个操作是为了记录需要操作的节点 ListNode* snode = cur->next->next; ListNode* tnode = cur->next->next->next; cur->next = snode; snode->next = onode; onode->next = tnode; cur = onode; } return newnode->next;//返回空头的下一个节点也就是答案 } };
【推荐】FlashTable:表单开发界的极速跑车,让你的开发效率一路狂飙
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步