链表之增加头结点的前缀节点

  • 在许多链表题中往往需要在题目给的头结点之前增加一个前缀节点
  • 通常在删除链表和头结点需要交换时需要用到这一操作
  • 因为增加这个节点就避免了对删除头结点这种特殊情况的特殊处理
  • 而且往往在声明一个前缀节点之后再复制一个,前者保存不动用于最后结果返回,后者参与之后的操作

​ Leetcode203删除链表元素

  • 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
  • 输入:head = [1,2,6,3,4,5,6], val = 6
  • 输出:head = [1,2,6,3,4,5,6], val = 6
 public ListNode removeElements(ListNode head, int val) {

        ListNode prefinalHead=new ListNode(-1,head);
ListNode preHead=prefinalHead; while(head!=null){
if(head.val==val){
preHead.next=head.next;
}else{
preHead=preHead.next;
}
head=head.next;
} return prefinalHead.next;
}

Leetcode24两两交换链表中的节点

  • 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)
  • 输入:head=[1,2,3,4]
  • 输出:[2,1,4,3]
   public ListNode swapPairs(ListNode head) {
if(head==null){//没元素
return null;
}
if(head.next==null){//只有一个元素
return head;
} ListNode pre=head;
ListNode post=head.next;
ListNode finallastpre=new ListNode(-1,head);
ListNode lastpre=finallastpre; while(pre!=null){
if(post==null){//最后只剩一个节点
pre=pre.next;
}else{
ListNode temp=post.next;
post.next=pre;
lastpre.next=post;
pre.next=temp;
lastpre=pre;
pre=pre.next;
if(temp!=null){
post=temp.next;
}else{
post=null;
} }
} return finallastpre.next;
}

Leetcode19删除链表的倒数第N个结点

  • 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点
  • 输入:head=[1,2,3,4,5],n=2
  • 输出:[1,2,3,5]
    public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode prefinalHead=new ListNode(-1,head);
ListNode preHead=prefinalHead; ListNode fast=head;
ListNode slow=head; for(int i=1;i<n;i++){
fast=fast.next;
} while(fast.next!=null){
slow=slow.next;
fast=fast.next;
preHead=preHead.next;
} preHead.next=slow.next;
return prefinalHead.next;
}

Leetcode刷题之链表增加头结点的前缀节点的更多相关文章

  1. LeetCode刷题总结-链表

    LeetCode刷题总结-链表 一.链表     链表分为单向链表.单向循环链表和双向链表,一下以单向链表为例实现单向链表的节点实现和单链表的基本操作. 单向链表 单向链表也叫单链表,是链表中最简单的 ...

  2. 说了你可能不信leetcode刷题局部链表反转D92存在bug,你看了就知道了

    一.题目描述 找出数组中重复的数字 > 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. ...

  3. Leetcode刷题之链表中箭头转移和内容转移

    链表中箭头转移和内容转移 链表中特别注意xxx.next=xxx 和xxx=xxx的区别 xxx.next=xxx表示将指针(箭头)转移 xxx=xxx表示将内容转移 Leetcode206翻转链表 ...

  4. leetcode刷题记录——链表

    使用java实现链表 单向链表 双向链表 单向循环链表 双向循环链表 题目记录 160.相交链表 例如以下示例中 A 和 B 两个链表相交于 c1: A: a1 → a2 c1 → c2 → c3 B ...

  5. leetCode刷题(使用链表做加法)

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = ...

  6. C#LeetCode刷题之#671-二叉树中第二小的节点(Second Minimum Node In a Binary Tree)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4100 访问. 给定一个非空特殊的二叉树,每个节点都是正数,并且每 ...

  7. C#LeetCode刷题-树

    树篇 # 题名 刷题 通过率 难度 94 二叉树的中序遍历   61.6% 中等 95 不同的二叉搜索树 II   43.4% 中等 96 不同的二叉搜索树   51.6% 中等 98 验证二叉搜索树 ...

  8. LeetCode刷题 链表专题

    链表专题 链表题目的一般做法 单链表的结构类型 删除节点 方法一 方法二 增加节点 LeedCode实战 LC19.删除链表的倒数第N个结点 解法思路 LC24.两两交换链表中的节点 解法思路 LC6 ...

  9. C#LeetCode刷题-链表

    链表篇 # 题名 刷题 通过率 难度 2 两数相加   29.0% 中等 19 删除链表的倒数第N个节点   29.4% 中等 21 合并两个有序链表 C#LeetCode刷题之#21-合并两个有序链 ...

随机推荐

  1. SQL Server 2005 - 让 SELECT 查詢結果额外增加递增序号

    /* 方法一*/SELECT 序號= (SELECT COUNT(客戶編號) FROM 客戶 AS LiMing                 WHERE LiMing.客戶編號<= Chan ...

  2. 60天shell脚本计划-2/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年2月1日 --修改时间:2021年2月5日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在评 ...

  3. 什么是NFT?

    我有一个年轻朋友,最近买了一个数字艺术品,9百多入手,几周后卖掉,赚了7万多,他告诉我这个东西叫NFT. 2021年twitter创始人杰克.多西将自己发布的第一条twitter通过NFT以250万美 ...

  4. Leaflet:Marker、Popup类

    Marker.Popup.Tooltip类都是继承自Layer类:Event与Layer Marker 1.用例 L.marker([41,123]).addTo(map); 2.实例化 L.mark ...

  5. k8s dashboard 安装和证书更新

    1.k8s 搭建   参见https://blog.51cto.com/lizhenliang/2325770 [root@VM_0_48_centos ~]# kubectl get cs NAME ...

  6. 前端人员不要只知道KFC,你应该了解 BFC、IFC、GFC 和 FFC

    前言 说起KFC,大家都知道是肯德基,但面试官问你什么是BFC.IFC.GFC和FFC的时候,你是否能够像回答KFC是肯德基时的迅速,又或者说后面这些你根本就没听说过,作为一名前端开发工程师,以上这些 ...

  7. 【python画圆】pip安装库时出现Read timed out.解决办法

    昨天第一次用python画圆,当时并没有安装numpy库(导入数据包)和matplotlib库(导入图形包),于是尝试用pip安装库 首先,我先更新了pip,如下图: 顺便附上成功截图: 然后安装nu ...

  8. 5分钟学会 gRPC

    介绍 我猜测大部分长期使用 Java 的开发者应该较少会接触 gRPC,毕竟在 Java 圈子里大部分使用的还是 Dubbo/SpringClound 这两类服务框架. 我也是近段时间有机会从零开始重 ...

  9. linux下的硬盘分区、格式化、挂载

    linux下的MBR(msdos)分区.格式化.挂载 在linux下,需要使用一块硬盘. 需要进行以下四步: 识别硬盘-----分区规划-----格式化-----挂载 步骤一:分区规划 MBR模式分区 ...

  10. laravel 框架登录 参考

    一.登录功能1.书写登录路由Route::view('login','login');2.书写登录页面  视图层<form action="{{route('loginDo')}}&q ...