当前位置: 首页 > news >正文

【leetcode hot 100 24】两两交换链表中的节点

解法一:先判断链表是否为空,若为空则直接返回;否则用leftright指向第一个和第二个节点,当这两个节点非空时一直执行交换。其中先判断right.next==null,说明链表为偶数且已经交换完break;再判断right.next.next==null,说明链表为奇数且已经交换完break;否则重新设置leftright继续循环。

/**
 * 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) {
        if (head == null){
            return head;
        }
        ListNode left=head, right=head.next;
        while(left!=null && right!=null){
            int temp = left.val;
            left.val = right.val;
            right.val = temp;
            if(right.next==null){
                break;
            }
            if(right.next.next==null){
                break;
            }
            left = right.next;
            right = left.next;
        }
        return head;
    }
}

注意:

  • 先判断链表是否为空,若为空则直接返回
  • left!=null && right!=null,则一直交换
  • 先判断right.next==null,说明链表为偶数且已经交换完break;再判断right.next.next==null,说明链表为奇数且已经交换完break;否则重新设置leftright继续循环。

错误原因:只进行了节点内部值的交换,不是节点之间的交换。

解法二:递归

递归的终止条件是链表中没有节点,或者链表中只有一个节点,此时无法进行交换。

如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。链表中的其余节点的两两交换可以递归地实现。在对链表中的其余节点递归地两两交换之后,更新节点之间的指针关系,即可完成整个链表的两两交换。

class Solution {
    public ListNode swapPairs(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode newHead = head.next;
        head.next = swapPairs(newHead.next);
        newHead.next = head;
        return newHead;
    }
}

注意:

  • 中止条件:head == null || head.next == null

相关文章:

  • vulnhub-DC-9 SQL注入、“ssh端口敲门”、hydra爆破
  • 题解:AT_arc093_b [ABC092D] Grid Components
  • Python规则引擎DIY:从零开始构建规则引擎
  • Linux》》Ubuntu22.04下Docker的安装 Docker
  • 【VS】vs生成前事件,复制脚本文件至运行目录
  • Python Numpy面试题及参考答案 草
  • Prompt 工程
  • MySQL中IN关键字与EXIST关键字的比较
  • JAVA:利用 Jsoup 轻松解析和操作 HTML 的技术指南
  • 展望 AIGC 前景:通义万相 2.1 与蓝耘智算平台共筑 AI 生产力高地
  • 如何在Android中实现SQLite数据库操作
  • 【设计模式】设计模式介绍
  • 力扣热门100题【525,1314】
  • 数字隔离器,如何提升储能系统的安全与效能?
  • Python - 爬虫;爬虫-网页抓取数据-工具curl
  • Python精进系列:filter 模块
  • leetcode 142. 环形链表 II
  • STM第三天点亮LED
  • 修改nginx配置,同一台服务器部署多个前端项目
  • [C语言笔记]07、数组
  • 伊朗港口爆炸已致46人死亡
  • 银川市长信箱被指“已读乱回”,官方通报:对相关责任人问责处理
  • 在县中,我看到“走出去”的渴望与“留下来”的惯性
  • 从中央政治局会议看经济工作着力点:以高质量发展的确定性应对外部不确定性
  • 蚂蚁财富28亿港元要约收购耀才证券,筹谋香港券商牌照
  • 一季度公募管理规模出炉:44家实现增长,4家规模环比翻倍