leetcode: Swapping Nodes in a Linked List

news2025/1/16 20:52:06

leetcode: Swapping Nodes in a Linked List

  • 1. 题目描述
  • 2. 题目解答
  • 3. 总结

1. 题目描述

You are given the head of a linked list, and an integer k.

Return the head of the linked list after swapping the values of the kth node 
from the beginning and the kth node from the end (the list is 1-indexed).

Example 1:

Input: head = [1,2,3,4,5], k = 2
Output: [1,4,3,2,5]

Example 2:

Input: head = [7,9,6,6,7,8,3,0,9,5], k = 5
Output: [7,9,6,6,8,7,3,0,9,5]

Constraints:

The number of nodes in the list is n.
1 <= k <= n <= 105
0 <= Node.val <= 100

2. 题目解答

class Solution {
public:
    ListNode* swapNodes(ListNode* head, int k) {

        ListNode* dummy = new ListNode(0);
        dummy->next = head;

        ListNode* A_ = findNodeA_(dummy, k);
        cout<<A_->val<<endl;
        ListNode* A  = A_->next;

        ListNode* B_ = findNodeB_(dummy, k);
        ListNode* B  = B_->next;

        cout<<A_->val<<" "<<A->val<<" "<<B_->val<<" "<<B->val<<endl;

        if(B->next == A){
            ListNode* temp = A->next;
            B_->next = A;
            A->next = B;
            B->next = temp;
        }
        else if(A->next == B){
            ListNode* temp = B->next;
            A_->next = B;
            B->next = A;
            A->next = temp;

        }
        else{
            ListNode* temp = B->next;
            A_->next = B;
            B->next = A->next;
            B_->next = A;
            A->next = temp;
        }
        return dummy->next;
    }
private:
    ListNode* findNodeA_(ListNode* dummy, int k){
        ListNode* temp = dummy;
        while(k-- > 1){
            temp = temp->next;
        }
        return temp;
    }

    ListNode* findNodeB_(ListNode* dummy, int k){
        ListNode* temp_pre = dummy;
        ListNode* temp_after = dummy;

        while(k-- > 0){
            temp_pre = temp_pre->next;
        }

        while(temp_pre->next != nullptr){
            temp_pre = temp_pre->next;
            temp_after = temp_after->next;
        }
        
        return temp_after;
    }
};

3. 总结

  第一步:如果在已经做了leetcode: Remove Nth Node From End of List这道题目,或者在已经知道dummy节点trick的基础上,应该会有一个大概的思路,可以写出findNodeA_和findNodeB_。其中A_表示k-1th元素,A表示kth元素;B_表示倒数k+1th元素,B表示倒数kth元素。
  第二步:通过举一个特例,可以写出交换两个节点的代码:

A_->next = B;
B->next = A->next;
B_->next = A;
A->next = temp;

  在写第二步代码的时候

原始代码不成环的条件推论
A_->next = BA_ != BB->next != A
B->next = A->nextB != A->nextA->next != B
B_->next = AB_ != AA->next != B

  这也就是第三步写出如下代码的来源:

        if(B->next == A){
            ListNode* temp = A->next;
            B_->next = A;
            A->next = B;
            B->next = temp;
        }
        else if(A->next == B){
            ListNode* temp = B->next;
            A_->next = B;
            B->next = A;
            A->next = temp;

        }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/378864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ECMAScript 详解

ECMAScript 历史我们首先来看 ECMA 是什么。ECMA&#xff0c;是欧洲计算机制造商协会&#xff08;European Computer Manufacturers Association&#xff09;的简称&#xff0c;是一家国际性会员制度的信息和电信标准组织。1994 年之后&#xff0c;由于组织的标准牵涉到很多其他…

【Leetcode 剑指Offer】第 6 天 搜索与回溯算法(简单)

搜索与回溯剑指 Offer 32 - I. 从上到下打印二叉树层序遍历 广搜 BFScollections双端队列 deque剑指 Offer 32 - II. 从上到下打印二叉树 II剑指 Offer 32 - III. 从上到下打印二叉树 III剑指 Offer 32 - I. 从上到下打印二叉树 题;从上到下打印出二叉树的每个节点&#xff0c…

单通道说话人语音分离——DPRNN(Dual-Path Recurrent Neural Network)

参考文献&#xff1a;《DUAL-PATH RNN: EFFICIENT LONG SEQUENCE MODELING FOR TIME-DOMAIN SINGLE-CHANNEL SPEECH SEPARATION》 DPRNN网络是Con-Tasnet的改进网络 Con-Tasnet介绍详情请看上一篇文章 单通道说话人语音分离——Conv-TasNet(Convolutional Time-domain audio…

应用程序性能优化方案,web服务五级缓存优化,服务器性能优化...

winfrom 全局异常捕获WPF 全局异常捕获Asp.Net全局异常捕获MVC 全局异常捕获AspNetNetCore 全局异常捕获一级缓存html/css/js 前端缓存二级缓存Asp.Net MVC AspNetCore 客户端缓存设置三级缓存服务端缓存四级redis 数据库缓存服务端缓存五级sqlserver 数据库缓存设置分布式缓存…

2023年湖北建设厅资料员证怎么考需要什么条件?启程别

2023年湖北建设厅资料员证怎么考需要什么条件&#xff1f;启程别 湖北资料员目前已经开始组织考试了&#xff0c;各位想要考资料员的现在可以开始准备报考相关准备工作了。资料员怎么考需要什么条件&#xff1f;启程别告诉你 建设厅资料员证怎么考 网报&#xff1a;七大员全国…

ARM学习(十八)jinkozone调试问题总结

笔者来聊聊ARM的函数的调用规则 1、ARM函数调用规则介绍首先介绍几个术语&#xff0c; AAPCS&#xff1a;Procedure Call Standard for the ARM Architecture APCS&#xff1a;ARM Procedure Call Standard TPCS&#xff1a;Thumb Procedure Call Standard ATPCS&#xff1a;AR…

5.3 redis分布式锁【Java 面试第三季】

redis分布式锁【Java 面试第三季】前言推荐redis分布式锁概览47_redis分布式锁前情说明48_boot整合redis搭建超卖程序-上49_boot整合redis搭建超卖程序-下50_redis分布式锁0151_redis分布式锁0252_redis分布式锁0353_redis分布式锁0454_redis分布式锁0555_redis分布式锁0656_re…

【Java|golang】2363. 合并相似的物品---桶排序

给你两个二维整数数组 items1 和 items2 &#xff0c;表示两个物品集合。每个数组 items 有以下特质&#xff1a; items[i] [valuei, weighti] 其中 valuei 表示第 i 件物品的 价值 &#xff0c;weighti 表示第 i 件物品的 重量 。 items 中每件物品的价值都是 唯一的 。 请你…

报名投票链接怎么做做一个投票的链接怎么做微信投票链接怎么做

近些年来&#xff0c;第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放&#xff0c;更多人选择微信投票小程序平台&#xff0c;因为它有非常大的优势。1.它比起微信公众号自带的投票系统、传统的H5投票系统有可以图…

案例|政务大数据平台数据安全建设实践

《关于加强数字政府建设的指导意见》、《全国一体化政务大数据体系建设指南》&#xff0c;对全面开创数字政府建设新局面作出部署&#xff0c;保障数据安全&#xff0c;提升数字政府基础设施的支撑能力&#xff0c;也明确成为数字政府建设探索与实践中的重点任务。那么&#xf…

王道计算机网络课代表 - 考研计算机 第五章 传输层 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 计算机网络 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “传输层” 章节知识点总结的十分全面&#xff0c;涵括了《计算机网络》课程里的全…

klee内存模型

klee内存模型一.LLVM基础二.Klee中相关的类2.1.基础类2.2.内存管理相关类三.示例3.1.示例13.2.示例23.3.示例33.4.示例4这篇blog主要通过一些简单的示例来了解以下klee对内存的建模方式。 首先一个C语言程序在运行时&#xff0c;内存主要包括&#xff1a; 代码段&#xff0c;程…

如何从零到一的设计一套轻易云数据集成平台这样的系统架构

一个集成平台的架构设计需要考虑多个方面&#xff0c;包括系统架构、技术选型、数据存储、安全设计等。下面是参考轻易云数据集成平台的架构设计思路&#xff1a;系统架构首先需要确定系统的整体架构&#xff0c;这包括前后端分离、微服务架构、容器化部署等。根据需求和规模的…

老字号白酒企业——金徽酒借力泛微,升级门户,实现统一办公

金徽酒股份有限公司前身系康庆坊、万盛魁等多个徽酒老作坊基础上组建的省属国营大型白酒企业&#xff0c;曾用名甘肃陇南春酒厂&#xff0c;是国内建厂最早的中华老字号白酒酿造企业之一。2016年3月10日&#xff0c;金徽酒在上海证券交易所挂牌上市。 &#xff08;图片素材来自…

Airbnb(三) Managing Diversity in Airbnb Search 搜索多样性

abstract 搜索系统中一个长期的问题是结果多样性。从产品角度讲&#xff0c;给用户多种多样的选择&#xff0c;有助于提升用户体验及业务指标。 多样性需求和模型的目标是相矛盾的&#xff0c;因为传统ctr模型是 point wise&#xff0c;只看单个相关性不管相邻之间item差异。 …

字节前端一面常见vue面试题(必备)

Vue为什么没有类似于React中shouldComponentUpdate的生命周期 考点: Vue的变化侦测原理前置知识: 依赖收集、虚拟DOM、响应式系统 根本原因是Vue与React的变化侦测方式有所不同 当React知道发生变化后&#xff0c;会使用Virtual Dom Diff进行差异检测&#xff0c;但是很多组件…

如何顺利渡过三月“大考”?ScanV为您献上“通关秘籍”

随着网络安全形势日益复杂、严峻&#xff0c;在重大安全保障事件期间&#xff0c;重要业务系统&#xff0c;尤其是党政机关、国企央企、能源、金融等重要的关基单位更应重视网站及业务系统安全。 临近三月重保季&#xff0c;知道创宇推出“御黑行动-典型案例篇”&#xff0c;以…

美国近50%的企业都在使用ChatGPT!你的企业用了吗?

当一些人还在尝试向人工智能聊天程序ChatGPT提问、和它进行沟通交流时&#xff0c;不少美国企业已把ChatGPT应用到了日常工作中&#xff0c;甚至代替了部分员工&#xff0c;节省了企业成本。据美国《财富》杂志网站近日报道&#xff0c;本月早些时候&#xff0c;一家提供就业服…

王道计算机网络课代表 - 考研计算机 第四章 网络层 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 计算机网络 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “网络层” 章节知识点总结的十分全面&#xff0c;涵括了《计算机网络》课程里的全…

HTML标签——表格标签

HTML标签——表格标签 目录HTML标签——表格标签一、表格标题和表头单元格标签场景&#xff1a;注意点&#xff1a;案例实操小结二、表格的结构标签场景&#xff1a;注意点&#xff1a;案例实操&#xff1a;三、合并单元格思路场景&#xff1a;代码实现一、表格标题和表头单元格…