算法——两两交换链表中的节点(leetcode24)

这是一道对于链表节点进行操作的题目非常考验对于链表操作的基本功;

解法:

本题的解法结合下图来进一步解释

创建一个虚拟节点指向头结点以便使代码逻辑看起来更为简便且操作节点容易,定义cur是为了方便找到cur之后的两个节点进行交换操作定义pre和aft是为了保存执行步骤二以及步骤三时需要用到的节点;如果我们想交换节点1和节点2的话那么就需要依次执行步骤一、步骤二、步骤三这时节点1和节点2便完成了交换的操作

接着我们移动cur(cur=cur.next.next)以此来交换之后的两个节点,对于此操作的终止条件来说如果是偶数个节点那么只需判断cur.next==null即可因为我们的cur指针是指向两个交换节点的前一个节点如果是奇数个节点那么我们只需让cur.next.next等于null终止循环即可得到节点两两交换的链表返回vNode.next即可;

反思:

我刚开始做这道题的时候只想着两两交换节点首先将节点数量为空节点数量为1个的情况过滤出去直接返回head然后就是让虚拟头结点指向节点2让节点2指向节点1,节点1指向节点3接着移动指向节点1和节点2的指针于节点3和节点4再让其交换即可然而这种交换的解法是完全不对的在解题过程中总是报空指针的问题即使不报空指针的问题也只能解出一部分测试用例偶数个节点的测试用例一直是不对的后又听了卡尔老师的讲解视频后才发现自己的节点操作完全就是错误的会造成输出时在节点3之后只输出奇数节点,偶数节点全部都指向自己的前一个节点也就是奇数节点(例节点4指向节点3节点6指向节点5)是没有节点指向偶数节点的如下图所示,对于这种操作还是自己对于链表操作的基本功不够熟练需加强操作和理解。

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode() {}
 * ListNode(int val) { this.val = val; }
 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
      ListNode vNode=new ListNode();
      vNode.next=head;
      ListNode cur=vNode;
      ListNode pre;
      ListNode aft;
      while(cur.next!=null&&cur.next.next!=null){
        pre=cur.next;
        aft=cur.next.next.next;
        cur.next=cur.next.next;
        cur.next.next=pre;
        cur.next.next.next=aft;
        //移动cur
        cur=cur.next.next;
      }
      return vNode.next;
    }
}
相关推荐
2601_962218616 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
吞下星星的少年·-·6 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
stolentime8 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
和裕9 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
衡石科技9 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
Msshu12310 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
shirsl10 小时前
算法 Day 2 滑动窗口 + 栈 / 单调栈
开发语言·python·算法
土司大王11 小时前
LeetCode hot100 回溯专题总结:Java 通用模板、决策树模型
java·算法·leetcode·决策树
2601_9622186111 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
那年窗外下的雪.12 小时前
AIDC 学习日志|第 22 天|All-Active/Single-Active 故障演练设计
服务器·网络·学习·算法·哈希算法