发布时间:2023-11-17 16:30
目录??
???两两交换链表的结点 ??
???题目描述??:
???解题思路??:
???代码如下??:
???删除链表的倒数第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;
}
}
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;
}
}
以上就是小王给大家带来的链表系列的题目 觉得写的不错的话 麻烦给个三连吧
谢谢你们这么好看还关注了我!???