力扣刷题|力扣刷题篇——链表篇




目录
两两交换链表的结点
题目描述:
解题思路:
代码如下:
删除链表的倒数第N个结点
题目描述:
解题思路:
图解 :
代码附上:
【力扣刷题|力扣刷题篇——链表篇】

友友们 大家好呀 我是你们的小王同学 今天小王同学给大家带来两道经典的链表练习
如果大家觉得小王写的不错的话 麻烦给个三连吧(doge)
小王的github:WANGxinzhe666 (github.com)
小王的gitee:比特王信哲 (bitewang) - Gitee.com
小王的主页:小王同学
两两交换链表的结点24. 两两交换链表中的节点 - 力扣(LeetCode)
题目描述: 力扣刷题|力扣刷题篇——链表篇
文章图片


解题思路:
  • 根据题意要求 不能单纯的改变节点内部的值,并且需要将实际的节点进行交换
  • 这道题小王同学采用的是递归的方式
  • 具体的操作看小王的代码
代码如下:
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所指向的节点就可以了。

图解 :
  • 定义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; } }


以上就是小王给大家带来的链表系列的题目 觉得写的不错的话 麻烦给个三连吧
谢谢你们这么好看还关注了我!
力扣刷题|力扣刷题篇——链表篇
文章图片


    推荐阅读