链表-24.两两交换链表中的结点-力扣(LeetCode)

一、题目解析

1、不能修改节点内部值

2、节点个数为0,100

二、算法原理

解法:循环(模拟)

1、结点个数特殊处理

当结点个数为0or1时,直接返回head即可

2、定义4个指针

tail、cur1、cur2和nnext,用于交换和链接前后节点

3、循环条件

观察到只有cur1和cur2都不为nullptr时,循环才会继续

4、cur1和cur2特殊情况判断

1、cur1为nullptr时,可以跳出循环直接返回结果,即只有两个结点交换

2、cur1不为nullptr时,更新cur2=cur1->next

3、cur2为nullptr时,nnext不更新

4、cur2不为nullptr时,更新nnext=cur2->next

5、返回结果

我们定义了哨兵位结点newhead,直接返回newhead->next

三、代码示例

cpp 复制代码
class Solution {
public:
    ListNode* swapPairs(ListNode* head)
    {
        if(head == nullptr || head->next == nullptr) return head;//0or1个节点
        ListNode* newhead = new ListNode();
        ListNode* tail = newhead;
        ListNode* cur1 = head;
        ListNode* cur2 = head->next;
        ListNode* nnext = cur2->next;
        while(cur1!=nullptr && cur2!=nullptr)
        {
            tail->next = cur2;
            cur2->next = cur1;
            cur1->next = nnext;
            tail = cur1;
            cur1=cur1->next;
            if(cur1 == nullptr) break;
            else cur2 = cur1->next;
            if(cur2 != nullptr) 
                nnext = cur2->next;
        }
        return newhead->next;    
    }
};

看到最后,如果对您有所帮助,还请点赞、收藏和关注,我们下期再见!

相关推荐
Navigator_Z7 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
mmmmath_38 小时前
LeetCode.104.二叉树的最大深度
数据结构·leetcode
Tisfy12 小时前
LeetCode 2333.最小差值平方和:排序 + 数学计算(不用二分)
数学·算法·leetcode·题解·贪心·排序
aqiu11111112 小时前
【C++算法打怪专栏】LeetCode 217. 存在重复元素(解法总结)
c++·算法·leetcode
yi01114 小时前
DAY28: LeetCode 111. 二叉树的最小深度
人工智能·笔记·python·算法·leetcode·二叉树·递归
信奥卷王14 小时前
[GESP202509 六级] 划分字符串(含视频)
数据结构·算法
局部有解15 小时前
Leetcode Hot100 - 最长连续序列
算法·leetcode·职场和发展
m0_7520356315 小时前
Redis 数据结构总结
数据结构·数据库·redis
tachibana215 小时前
Go 语言的 Map 是否是并发安全的?
开发语言·数据结构·后端·golang·go·语言
Logic10115 小时前
C语言/数据结构字符串题解:统计“chhc“子串权值总和——一次遍历模式匹配
c语言·数据结构·算法·字符串·时间复杂度·空间复杂度·ascii