目录🍟
友友们 大家好呀😻 我是你们的小王同学 今天小王同学给大家带来两道经典的链表练习 小王的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=2为例子来解释 🍦
第一步🍽:
第二步🍣:
第三步🦪:
第四步🍜 :
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;
}
}
以上就是小王给大家带来的链表系列的题目