目录
两两交换链表中的节点 这道题,可以说是--链表专题--,最经典的一道题,也是在面试中频率最高的一道题目,通常在面试中,面试官可能会从多个方面考察这道题目,所以大家需要对这道题目非常熟悉哦!!
本片博客就来详细的讲讲解一下 两两交换链表中的节点 的实现方法,让我们的面试变的更加顺利!!!
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
首先,先来了解一下什么是 哨兵位---头节点 ?
哨兵位 --- 头节点的作用:
- 我们设置一个哨兵头节点 pre_head,初始时指向 pre_head ->head ,然后设置两个指针 pre 和 cur,初始时 pre 指向 pre_head,而 cur 指向 head。
接下来,我们遍历链表,每次需要交换 pre 后面的两个节点,因此我们先判断 cur 和 cur.next 是否为空,若不为空,则进行交换,否则终止循环。
链表:【1,2,3,4】
复杂度分析 :
代码:
- class Solution {
- public:
- ListNode* swapPairs(ListNode* head)
- {
- // 创建一个哨兵位 头节点,并连接 原来的头节点
- ListNode* pre_head = new ListNode(-1,head);
- // 三指针 解法
- ListNode* pre = pre_head;
- ListNode* cur = head;
-
- // cur != nullptr 表示偶数个节点 , cur->next!=nullptr 表示奇数个节点
- while(cur!=nullptr && cur->next!=nullptr)
- {
- ListNode* nextnode = cur->next;
-
- // 开始翻转
- cur->next = nextnode->next;
- nextnode->next = cur;
- pre->next = nextnode;
- // 指针向后移动,准备下一次翻转
- pre = cur;
- cur = cur->next;
- }
- return pre_head->next;
-
- }
- };
最后我们来总结一下本文所介绍的内容,本文讲解来一道力扣中有关 两两交换链表中的节点的题目,这道题目是校招笔试面试中有关链表章节非常高频的一道题目,大家下去一定要自己再画画图,分析一下,把这段代码逻辑自己实现一遍,才能更好地掌握
以下就是我对 两两交换链表中的节点 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 链表专题 的理解,请持续关注我哦!!!