• 算法 之 链表


    大概说明

    链表操作,一般两种方式保存结果,一是新建node作为结果,二是创建dummy虚拟节点,通过temp.next的赋值,修改dummy的链表,然后通过dummy.next返回结果。

    学习中,记录备份一下~

    节点结构

    1. class ListNode {
    2. int val;
    3. ListNode next;
    4. ListNode() {}
    5. ListNode(int val) { this.val = val; }
    6. ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    7. }

    操作说明

    1. node1 = node2.next; // 表示node1这个变量的转变
    2. node1.next= node2; // 表示node1代表的链表都更改了这个节点的next

    两两交换链表节点

    1. // 方法1 直接迭代
    2. public ListNode swapPairs1(ListNode head) {
    3. ListNode dummyHead = new ListNode(0);// 设置dummy节点,方便定位最后的答案,dummy自身值不重要
    4. dummyHead.next = head;// 塞初始答案
    5. ListNode temp = dummyHead;// 临时节点,用于node交换过程中保存正确的答案
    6. while (temp.next != null && temp.next.next != null) {// temp.next和temp.next.next之间交换
    7. ListNode node1 = temp.next;// 第一个需要交换的node1
    8. ListNode node2 = temp.next.next;// 第二个需要交换的node2
    9. temp.next = node2;// 交换第一步:node2变第一个
    10. node1.next = node2.next;// 交换第二步:node1 接上 node2.next
    11. node2.next = node1;// 交换第三步:node2 next 指向 node1
    12. temp = node1;// 准备下次循环 temp等于下次交换的上一个,也就是node1
    13. }
    14. return dummyHead.next;// 返回定位节点dummy的next
    15. }
    16. // 方法1 递归
    17. public ListNode swapPairs2(ListNode head) {
    18. if(head == null || head.next == null) return head;// 两两交换 其中一个为空则直接返回
    19. ListNode newHead = head.next;// 新建head ,等于入参的next
    20. head.next = swapPairs2(newHead.next);// head的next 等于 下次交换的返回值
    21. newHead.next = head;// newHead的next等于 刚刚拿到答案的head
    22. return newHead;
    23. }

  • 相关阅读:
    HTTP学习——跨域资源共享(CORS)
    NAT-DDNS内网穿透技术,快解析DDNS的优势
    DQL数据查询语句之ORDER BY排序查询示例
    C语言“我的家谱”程序
    17.webpack4优化配置介绍
    分布式事务----seata
    备战蓝桥杯Day23-桶排序
    flask-socketio实现websocket通信
    【花雕体验】15 尝试搭建Beetle ESP32 C3之Arduino开发环境
    JAVA毕业设计教师教学质量评估系统计算机源码+lw文档+系统+调试部署+数据库
  • 原文地址:https://blog.csdn.net/zone_four/article/details/133822215