• 算法 之 链表


    大概说明

    链表操作,一般两种方式保存结果,一是新建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. }

  • 相关阅读:
    Vue的模板语法
    JDK安装教程、Eclipse安装教程
    GTK进行rgb绘图
    黑苹果之微星(MSI)主板BIOS详细设置篇
    java毕业设计物资租赁管理系统mybatis+源码+调试部署+系统+数据库+lw
    6.4-为何要深度学习
    “讳疾忌医”的开源走不远
    基于 ovarian 数据集 进行生存分析
    【Python机器学习】无监督学习——不同类型的预处理
    负载均衡 —— SpringCloud Netflix Ribbon
  • 原文地址:https://blog.csdn.net/zone_four/article/details/133822215