力扣刷题篇——链表篇
2023-02-18 16:35:38 时间
目录?
友友们 大家好呀? 我是你们的小王同学 今天小王同学给大家带来两道经典的链表练习 小王的github?:WANGxinzhe666 (github.com) 小王的gitee?:比特王信哲 (bitewang) - Gitee.com 小王的主页?:小王同学
两两交换链表的结点 ?
题目描述?:
解题思路?:
- 根据题意要求 不能单纯的改变节点内部的值,并且需要将实际的节点进行交换
- 这道题小王同学采用的是递归的方式
- 具体的操作看小王的代码 ?
代码如下?:
class Solution {
public ListNode swapPairs(ListNode head) {
//递归结束的条件是 头节点不存在或头节点的下一个节点不存在。
此时不需要交换咱们的相邻的节点 直接返回 头节点就行了
if(head==null||head.next==null) return head;
//获取当前节点的下一个节点
ListNode next=head.next;
//进行递归
ListNode newNode=swapPairs(next.next);
//两两交换
next.next=head;
head.next=newNode;
return next;
}
}
删除链表的倒数第N个结点?
题目描述?:
解题思路?:
- 这道题就是一道经典的双指针的题型,如果我们要删除倒数第N个节点
- 定义两个指针 fast 和slow 让fast移动n步,然后让fast和slow同时移动
- 直到fast指向链表末尾。删掉slow所指向的节点就可以了。
图解? :
- 定义fast和slow两个指针,初始化值为虚拟头结点
我们以第一个n=2为例子来解释 ?
第一步?:
第二步?:
- 首先让我们的fast指针先走n+1步 这里的n为2,n+1的原因是这样slow才能指向删除节点的上一个节点
第三步?:
- fast和slow同时移动,直到fast指向末尾
第四步? :
- 删除slow指向的下一个节点
代码附上:?
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
//设置虚拟头结点
ListNode dummy=new ListNode(-1);
dummy.next=head;
ListNode fast=dummy; //定义双指针
ListNode slow=dummy;
while(n-->0){
fast=fast.next;
}
ListNode prev=null;
while(fast!=null){ //fasst 和slow指针同时移动知道fast指向末尾
prev=slow;
slow=slow.next;
fast=fast.next;
}
prev.next=slow.next; //上一节点的next指针绕过slow直接指向了slow的下一个节点
//slow.next=null;
return dummy.next;
}
}
以上就是小王给大家带来的链表系列的题目
相关文章
- 手绘图解java类加载原理
- Java中的线程到底有哪些安全策略
- Java中观察者模式与委托,还在傻傻分不清
- 一图详解java-class类文件原理
- Java遇上SPL:架构优势和开发效率,一个不放过
- 长篇图解java反射机制及其应用场景
- [java并发编程]基于信号量semaphore实现限流器
- java并发编程-StampedLock高性能读写锁
- 【java并发编程】ReentrantLock 可重入读写锁
- 【java并发编程】Lock & Condition 协调同步生产消费
- Java synchronized对象级别与类级别的同步锁
- java并发编程JUC第十二篇:AtomicInteger原子整型
- java并发编程JUC第十一篇:如何在线程之间进行对等数据交换
- java并发编程JUC第十篇:CyclicBarrier线程同步
- java并发编程JUC第九篇:CountDownLatch线程同步
- java并发编程工具类JUC第八篇:ConcurrentHashMap
- java并发编程工具类JUC第七篇:BlockingDeque双端阻塞队列
- java并发编程工具类JUC第六篇:SynchronousQueue同步队列
- java并发编程工具类JUC第五篇:PriorityBlockingQueue优先级队列
- java并发编程工具类JUC第四篇:LinkedBlockingQueue链表队列