目录
两两交换链表的结点
题目描述:
解题思路:
代码如下:
删除链表的倒数第N个结点
题目描述:
解题思路:
图解 :
代码附上:
【力扣刷题|力扣刷题篇——链表篇】
友友们 大家好呀 我是你们的小王同学 今天小王同学给大家带来两道经典的链表练习两两交换链表的结点24. 两两交换链表中的节点 - 力扣(LeetCode)
如果大家觉得小王写的不错的话 麻烦给个三连吧(doge)
小王的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个结点 19. 删除链表的倒数第 N 个结点
题目描述:
文章图片
解题思路:
- 这道题就是一道经典的双指针的题型,如果我们要删除倒数第N个节点
- 定义两个指针 fast 和slow 让fast移动n步,然后让fast和slow同时移动
- 直到fast指向链表末尾。删掉slow所指向的节点就可以了。
图解 :
我们以第一个n=2为例子来解释
- 定义fast和slow两个指针,初始化值为虚拟头结点
文章图片
第一步:
文章图片
第二步:
- 首先让我们的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;
}
}
以上就是小王给大家带来的链表系列的题目 觉得写的不错的话 麻烦给个三连吧
谢谢你们这么好看还关注了我!
文章图片
推荐阅读
- C++|C++之AVL树
- java|<Java SE> 数组详解大全(附带练习题).一维数组、二维数组、数组拷贝、数组遍历...
- 算法题5.27
- 算法与数据结构系列「限流算法专项」带你认识常用的限流算法的技术指南(分析篇)
- 数据结构——时间复杂度空间复杂度
- Java|替代 Postman + Swagger ~Apifox 才是 YYDS
- LeetCode|LeetCode 热题 HOT 100 第四十九天 152. 乘积最大子数组 中等题 用python3求解
- Linux(内核剖析):14---内核数据结构之链表(struct list_head)
- Linux(内核剖析):18---内核数据结构总结(数据结构选择与算法复杂度分析)