LeetCode——1721.交换链表中的节点
方法一:好理解,但是需要遍历三次链表
/*** 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 swapNodes(ListNode head, int k) {ListNode ahead = new ListNode(0,head);ListNode current = ahead;ListNode topK = new ListNode(0,null);ListNode botK = new ListNode(0,null);int count = 0;//第一次遍历,找到正数第K个节点,然后用一个新的节点暂存信息,同时求得总节点个数while(current.next!=null){count++;current = current.next;if(count==k){topK.val = current.val;topK.next = current.next;}}//count为总节点个数//第二次遍历找到倒数第K个节点,然后用一个新的节点暂存信息//正数是k,倒数换成正数就应该是链表的长度-k+1current = ahead;int increase = 0;while(current.next!=null){increase++;current = current.next;//找到倒数第K个节点,然后用一个新的节点暂存信息if(increase ==(count+1-k)){botK.val = current.val;botK.next = current.next;}}current = ahead;int num = 0;//第三次遍历,交换两个节点while(current.next!=null){num++;current = current.next;if(num==k){current.val= botK.val;//current.next=current.next;//仅仅是交换的节点的val值}if(num==(count+1-k)){current.val=topK.val;//current.next=current.next;}}return ahead.next;}
}
方法二,值遍历一次,但是要注意指针的挪动次数关系的理解
/**声明三个节点cur、first、last全部指向head节点利用current从头结点开始遍历链表,topK指针移动k - 1步后定位至该链表正数第k个节点,设链表的节点个数为nums,当first指针指向第k个节点时,此时链表还有nums - k个节点没有遍历。因为链表的头节点到倒数第k个节点之间的节点个数刚好也是nums - k个,所以当遍历到正数第k个节点后,botK指针开始从head节点移动nums - k步后即指向了倒数第k个节点。
*/
class Solution {public ListNode swapNodes(ListNode head, int k) {ListNode current = head;ListNode topK = head;ListNode botK = head;int count = 1;while(current.next!=null){ if(count<k){topK = topK.next;}else{botK = botK.next;}count++;current = current.next;}//交换两个节点int temp = topK.val;topK.val = botK.val;botK.val = temp;return head;}
}
LeetCode——1721.交换链表中的节点相关推荐
- 【Leetcode -1721.交换链表中的节点 -2058.找出临界点之间的最小和最大距离】
Leetcode Leetcode -1721.交换链表中的节点 Leetcode -2058.找出临界点之间的最小和最大距离 Leetcode -1721.交换链表中的节点 题目:给你链表的头节点 ...
- LeetCode 1721. 交换链表中的节点(快慢指针)
文章目录 1. 题目 2. 解题 1. 题目 给你链表的头节点 head 和一个整数 k . 交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引). 示例 ...
- leetcode 1721. Swapping Nodes in a Linked List | 1721. 交换链表中的节点(Java)
题目 https://leetcode.com/problems/swapping-nodes-in-a-linked-list/ 题解 思路很简单:找到左节点,找到右节点,最后交换左右节点的 val ...
- LeetCode 23合并K个升序链表24两两交换链表中的节点
维护不易,点赞再看,感谢支持 合并K个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例 1: 输入:lists = [[1 ...
- Leetcode(24)——两两交换链表中的节点
Leetcode(24)--两两交换链表中的节点 题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 1: ...
- Java实现 LeetCode 24 两两交换链表中的节点
24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3-&g ...
- LeetCode 24:两两交换链表中的节点、1662. 检查两个字符串数组是否相等
今天一道是单链表一道是String类的 一:LeetCode 24:两两交换链表中的节点 先来看一下题目信息 索引 题目意思就是把一个链表中的两两节点进行交换,题目给的例子是4个节点,是偶数个,两两节 ...
- LeetCode 24.两两交换链表中的节点 C语言
题目 24.两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3- ...
- 24. 两两交换链表中的节点-两两反转链表-LeetCode
一.题目 二.思路 1.采用递归的方式 2.可以通过递归的方式实现两两交换链表中的节点. 递归的终止条件是链表中没有节点,或者链表中只有一个节点,此时无法进行交换. 如果链表中至少有两个节点,则在两两 ...
最新文章
- 形状相似的物品_废弃物品在体育课中的再利用
- python求最大连续子数组
- Codevs 1689 建造高塔
- 浅谈-LINUX 操作系统启动过程
- 灵感库 | 让设计师欲罢不能的设计网站
- boost.asio无锁异步并发
- Matlab计算机视觉/图像处理工具箱推荐
- SIP信令协议消息(四)
- FusionSphere 物理CPU与VCPU的关系梳理总结
- MacBook蓝牙鼠标 自动断开问题
- linux 2.6.32文件系统的dentry父子关系
- Android微信支付集成流程及其常见错误
- 赞美之外,Unity引擎3D引擎存在什么弊病?
- 计算机常用英语对话,英语口语对话之买电脑时常用基本口语
- 有哪些好用的python在线编程环境?
- Android 穿过点画平滑曲线
- 不要写死!天猫App的动态化配置中心实践
- 买房后为何有装修公司找你?个人信息就卖5毛钱
- 数组遍历产生的索引越界问题
- 首次揭秘!​春晚活动下快手实时链路保障实践